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

İ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 
İyi çalışmalar.
Sağ olun size de iyi çalışmalar.
