![]() |
|
MSSQL e kaydettiğimde eklenen küsürat - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: MSSQL e kaydettiğimde eklenen küsürat (/showthread.php?tid=8197) |
MSSQL e kaydettiğimde eklenen küsürat - nevzatc - 23-10-2025 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. MSSQL e kaydettiğimde eklenen küsürat - kajmerantime - 23-10-2025 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. MSSQL e kaydettiğimde eklenen küsürat - nevzatc - 23-10-2025 Ö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 Cvp: MSSQL e kaydettiğimde eklenen küsürat - kajmerantime - 23-10-2025 (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. Sorunun çözülmesine sevindim. Bize de fikir oldu ![]() İyi çalışmalar. Cvp: MSSQL e kaydettiğimde eklenen küsürat - nevzatc - 24-10-2025 (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. Sağ olun size de iyi çalışmalar.
|