Delphi Can

Orjinalini görmek için tıklayınız: MSSQL e kaydettiğimde eklenen küsürat
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Mssql field -> SLAMOUNT (Float)
Info1, Info2: Double
Amount, FAmount: Double

Info1 := 300
Info2 := 0,3

Amount := 0,1

FAmount := Amount * (Inof1 / Info2)

Sonuç: FAmount = 100

Update xxxtablom Set SLAMOUNT=FAmount Where (Referans=xxx)

Veritabanındaki alana kaydedilen : 100,00000000000001

haliyle bu durum 100,00000000000001 > 100 gibi bir karşılaştırmada sorun yaratıyor

bunu neden yaptığı konusunda bilgi verebilecek arkadaşlara şimdiden teşekkür ederim.
Merhaba.

Parasal ve hassas hesaplamalar için Float/Double yerine DECIMAL/NUMERIC kullanmak daha doğru bir yaklaşımdır. Bu tipler ondalık değerleri binary yerine decimal olarak sakladıkları için bu tür sorunlar yaşanmaz.

Hesaplamalarınızda:
0,1 ve 0,3 gibi sayılar binary sistemde sonsuz basamaklı sayılardır (tıpkı 1/3'ün decimal sistemde 0,333... olması gibi)
Bu değerlerle yapılan işlemler sırasında küçük yuvarlama hataları birikir.
Sonuç olarak 100 yerine 100,00000000000001 gibi bir değer elde edersiniz.
Önemli olan ilk 8 basamaktı bu yüzden kaydetme ve güncelleme sql leri içinde Round(FAmount, 8) kullandım, bu şekilde veritabanına normal şekilde kaydettirdi şimdilik bu şekilde bu sorunumu aştım.
Teşekkürler
(23-10-2025, Saat: 15:51)nevzatc Adlı Kullanıcıdan Alıntı: [ -> ]Önemli olan ilk 8 basamaktı bu yüzden kaydetme ve güncelleme sql leri içinde Round(FAmount, 8) kullandım, bu şekilde veritabanına normal şekilde kaydettirdi şimdilik bu şekilde bu sorunumu aştım.
Teşekkürler

Sorunun çözülmesine sevindim. Bize de fikir oldu Smile
İyi çalışmalar.
(23-10-2025, Saat: 16:21)kajmerantime Adlı Kullanıcıdan Alıntı: [ -> ]
(23-10-2025, Saat: 15:51)nevzatc Adlı Kullanıcıdan Alıntı: [ -> ]Önemli olan ilk 8 basamaktı bu yüzden kaydetme ve güncelleme sql leri içinde Round(FAmount, 8) kullandım, bu şekilde veritabanına normal şekilde kaydettirdi şimdilik bu şekilde bu sorunumu aştım.
Teşekkürler

Sorunun çözülmesine sevindim. Bize de fikir oldu Smile
İyi çalışmalar.

Sağ olun size de iyi çalışmalar.  Shy