![]() | |
| | #1 (permalink) |
| Uye Üyelik Tarihi: 03/2004
Mesaj: 677
|
Bir ticari programa ek cozumler gelistirmekteyiz. Bu, oyle bir ticari program ki programdan girilen faturadaki tutarlar [brut, kdv, net], ayni faturanin girildigi diger programlardaki tutarla cogu zaman ayni olmayabiliyor. Kurus hanesinde 1 kurus, 2 kurus, asagi ya da yukari mutlaka kucuk bir oynamayla karsilasiyorsunuz. Gelistirdigimiz cozumler geregince, ticari seti piyasaya sunan firmanın programcilara sagladigi ek araclari (dll, referans, vb.) kullanarak, veritabanına yazma yoluna gitmeden bahsettigim programa disaridan fatura gonderiyoruz. Buraya kadar guzel... Ama yukarida bahsettigim yuvarlama sorunu, bizim cozumumuzun kullaniciya gosterdigi tutarlarla faturayi gonderdikten sonra ticari programda olusan tutarlar arasinda da yasaniyor. Nedenini bilmiyorum ama Delphi'deki SetRoundMode, RoundTo, SimpleRoundTo metodlarina kac farkli takla attirirsam attirayim bir turlu istedigim yuvarlamayi tutturamadim. SetRoundMode, sistem FPU'sunun yuvarlama turunu degistirmek (set etmek) amaciyla kullaniliyor. Ama her kayan noktali sayiya uyguladigim RoundTo isleminden sonra nedense bu yuvarlamalarda bir terslik oluyor ve tutarda tutarsizliklar ortaya cikiyor. Basinizi sisirdim, farkindayim. Okuduysaniz eğer... ![]() Bu kadar laf kalabaligi etmemin nedeni su sozu dogrulamak icin kendime zemin hazirlamak: En iyi algoritma, kendi yazdigin algoritmadir. Bir kac gun once yuvarlamalarda kullanmak icin ozel bir fonksiyon hazirladim ve su anda o fonksiyon, hazirladigimiz cozumun her yerini susluyor... Nerede yuvarlama, orada o. Ve tahmin edebileceginiz gibi RoundTo metodlarinda karsilastigim sorunlarin hicbiriyle bu fonksiyonda karsilasmadim...Yuvarlama ciddi bir problem. Konuyla ilgili arkadaslar, yazdigim fonksiyonun yaptigi isi RoundTo ile kiyaslayip, tamamen aynisi olmus diyebilir. Ama beynimi kemiren soru su: Cogunlukla ayni sonucu verse de, benim hazirladigim fonksiyon, tutarlarin bahsettigim ticari programla ayni olmasini sagliyabiliyor da neden RoundTo metodlari gecelerimi bana zehir eden tutar tutarsizliklarini yasatabiliyor bana? Not: Fonksiyon, kurus kismini (virgulden sonraki ondalik kismi) en yakin sayiya yuvarlamaktadir. Parametreler: AValue -> Yuvalanacak kayan noktali sayi. ADigit -> Kac haneye kadar yuvarlanacagi. Ornek: AValue -> 12,99999 ADigit -> 2 Sonuc -> 13 AValue -> 224,985678 ADigit -> 2 Sonuc -> 224,99 Kod: function RoundToNearest(AValue: Extended; ADigit: Integer): Extended;
var
i, f, n: Extended;
begin
i := Int(AValue);
f := Frac(AValue);
if (f = 0) then
Result := AValue
else
begin
f := f * Power(10, ADigit);
i := Int(f);
if ((i + 1) - f) < (f - i) then
n := i + 1
else
n := i;
if n = Power(10, ADigit) then
Result := Int(AValue) + 1
else
Result := Int(AValue) + (n / Power(10, ADigit));
end;
end;
|
| | |
![]() |
| Bookmarks |
| Seçenekler | |
| |
Benzer Konular | ||||
| Konu | Konuyu açana göre | Forum | Cevap | En Son Mesaj |
| photoshop köşe yuvarlama | pckedi | Photoshop / Corel / PSP | 3 | 10/05/2008 01:41 |
| Math.Round ile yuvarlama | zeroxxx | Javascript / DHTML / Ajax | 4 | 28/11/2007 16:48 |
| deli eden yuvarlama | sadroalin | ASP | 5 | 01/02/2006 19:49 |
| Sayi Yuvarlama | UltraFree | PHP | 9 | 28/01/2005 15:02 |
| tam sayıya yuvarlama acilen yardım | SHAKAK | Veritabanları & SQL | 5 | 24/11/2004 12:42 |
| Reklamlar & Desteklenenler | |
| Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv | |