C#基礎知識之Double加減出現誤差


概要

今天出現一個問題,235844.46-230000相減,得出的結果出乎意料,出來的結果如截圖:

看到這個結果大感意外,嘗試更改數值試試:

把235844.46更改為235844.47,然后235844.47-230000=5844.47,咦,居然正常了。

把把235844.46更改為235844.45,然后235844.45-230000=5844.45000000001,哎,又有問題了。

原因

double型的數值在相加減的時候,會先將數值轉換成二進制的數值如10001.10010110011,然后再做相加減。但是在轉換成二進制代碼表示的時候,存儲小數部分的位數會有不夠的現象,即無限循環小數,這就是造成微差距的主要原因。

解決方法

計算機計算都是二進制數字,首先是將數字轉化成二進制數(這樣容易造成二進制有可能位數不夠的情況)然后再計算,這樣就造成了誤差,Decimal類型的有效位數達到28位,而double類型的16位;對於一般的數據量不大的計算推薦用Decimal來;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM