為什么金額計算必須用BigDecimal?


金額計算不能用doube!!!!

金額計算必須用BigDecimal,下面對比一下用double 跟BigDecimal的區別。先看一個小例子:

請看題:

示例1

問, 結果是多少? 0.01?

No! 結果是0.009999999999999998!

為什么會這樣呢? 因為float和double都是浮點數,都有取值范圍,都有精度范圍。 浮點數與通常使用的小數不同,使用中,往往難以確定。

常見的問題是定義了一個浮點數,經過一系列的計算,它本來應該等於某個確定值,但實際上並不是!

double相減會轉換成二進制,因double有效位數為16位這就會出現存儲小數位數不夠的情況,小數的二進制有時並不能精確表示。

這種情況下就會出現誤差,解決方法就是使用BigDecimal,它的有效長度足夠長可存儲小數位數。

因此可代替double來進行加減乘除,金額必須是完全精確的計算,故不能使用double或者float,而應該采用java.math.BigDecimal。

 

總結:

因為計算機是以二進制存儲數值的,對於浮點數也是。對於計算機而言,0.1無法精確表達,這就是為什么浮點數會導致精確度缺失的。因此,金額計算,一般都是用BigDecimal 類型。


免責聲明!

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



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