Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > Pascal / Delphi / Delphi.NET

Cevapla
 
LinkBack Seçenekler
Eski 05/04/2007, 14:39   #1 (permalink)
Uye
 
epic Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 03/2004
Mesaj: 677
Varsayılan Delphi'de Yuvarlama

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;
epic hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

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


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 16:38.

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 |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net