C# Float & Double 處理小數時的注意事項
C#在處理小數點時有些地方要特別注意,只要是有小數點的變數都叫做浮點數(實數),在C#中比較常用的有
- Float(單精度浮點數)
- bit數(位元組數):32(4)
- 包含整數部分提供7位有效數字,超過的部分均為無效數字。
- 範圍:10-37~1038
- Double(雙精度浮點數)
- bit數(位元組數):64(8)
- 包含整數部分提供16位有效數字,但Turbo C 規定小數後最多保留六位元,其餘部分四捨五入。
- 範圍:10-307~10308
在C#裡面,有小數點的數值預設都是Double,由於浮點數之間不能做隱含轉換。所以下面寫法會出現毛毛蟲,正確寫法應該是要在0.45後面加上f,如果變數型別是Double則不會有此問題。
精準度的部分,Float的精準度整數+小數有效位數只有到7位數,之後的數值都是無效數字,下面範例可以看出。float a我們宣告為12345.6789012345但最後的結果只到12345.67為止是準確的
即使是使用Double,其精準位數也只到17位數。因為有了這種不精準的特性,避免在運算的時候出現誤差,建議在處理金額相關的作業時,變數宣告使用的是Decimal,其底層原理是人類比較熟悉的10進位運算,故作金額計算時使用Decimal較為恰當。
http://www2.lssh.tp.edu.tw/~hlf/class-1/lang-c/var-float.htm
https://aspnetmars.blogspot.com/2019/01/c-floatdoubledecimal.html