İlginç bir float toplama hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cetoonak
Üye
Mesajlar: 50
Kayıt: 12 Haz 2003 09:53
Konum: www.mussimsek.com

İlginç bir float toplama hatası

Mesaj gönderen cetoonak »

Merhaba

5 tane alanım var: Tutar, Odenen1, Odenen2, Odenen3, Kalan

Kalan Calculation Field

Kalan = Tutar - (Odenen1 + Odenen2 + Odenen3);

Diyelim ki Tutar 13,95 olsun

Odenen1 e 13,95 girdiğim zaman Kalanı 0 olarak hesaplıyor.

Odenen1 e 10 Odenen2 ye 3,95 girersem Kalan = -8,88178419700125E-16 gibi abuk subuk bir rakam hesaplıyor.
Aslında bu rakam 0 a çok yakın bir rakam ama 0 değil.

Odenen1 e 5 Odenen2 ye 5 Odenen3 e 3,95 girersem yine abuk subuk rakamı hesaplıyor.

Yani ben Odenenlerin toplamını tutar kadar giriyorum ama 0 bulması gerekirken saçmalıyor.

Alanlarımın hepsi float
OnCalculationa yazdığım kod çok basit:
Kalan.AsFloat = Tutar.AsFloat - (Odenen1.AsFloat + Odenen2.AsFloat + Odenen3.AsFloat);

1 haftadır bulamadım bunun gibi bişey başına gelen var mı ???
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Hocam ödenen 1'e 10 diğerine 3,95 girince saçmalıyro diyorsunuz peki ödenen 1'e 10,00 diğerine 3,95 girdiğin zaman yada sadece ödenen 1'e sadece 10,00 gir yine saçma sapan rakamlar mı gelecek eğer yine sorun devam ederse yazdığım kod bloğunu gönderirsen daha iyi yardımcı olurum.
Kolay gelsin...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
cetoonak
Üye
Mesajlar: 50
Kayıt: 12 Haz 2003 09:53
Konum: www.mussimsek.com

Mesaj gönderen cetoonak »

Evet hocam dediğin gibi girince de saçmalama olayı devam ediyor.
Kod şöyle

Kod: Tümünü seç

procedure TFrmVezneKaydi.MDOdenecekCalcFields(DataSet: TDataSet);
var T, O1, O2, O3, K: Double;
begin
  T:=DataSet.FieldByName('Tutar').AsFloat;
  O1:=DataSet.FieldByName('Odenen1').AsFloat;
  O2:=DataSet.FieldByName('Odenen2').AsFloat;
  O3:=DataSet.FieldByName('Odenen3').AsFloat;
  K:=T - (O1 + O2 + O3);
  DataSet.FieldByName('CalcKalan').AsFloat:=K;
end;
Bu arada bu dataset TdxMemData. Onunla ilgili olabilirmi acaba ?
cetoonak
Üye
Mesajlar: 50
Kayıt: 12 Haz 2003 09:53
Konum: www.mussimsek.com

Mesaj gönderen cetoonak »

Merhaba

Tam olarak herşeyi test etmedim ama sorun çözülmüş gibi görünüyor.
Biltes in tavsiyesi ile kodda AsFloat yerine AsCurrency kullandım.
Sonra saçmalayan rakamlar düzeldi.

Teşekkürler Biltes. Teşekkürler ilgilenenlere...
Cevapla