金額計算不能用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 類型。