我想知道爲什麼我得到這個錯誤。 (這是Eclipse調試的顯示日誌)Java雙精度總和問題
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
我不明白爲什麼我沒有得到簡單的2.97!
我想知道爲什麼我得到這個錯誤。 (這是Eclipse調試的顯示日誌)Java雙精度總和問題
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
我不明白爲什麼我沒有得到簡單的2.97!
如果你想2.97
,你應該使用BigDecimal
。
double
s作爲小數存儲在二進制,而不是小數。例如,3.75
僅存儲爲2^1 + 2^0 + 2^(-1) + 2^(-2)
。
2.8
和0.17
不能完全表示爲二進制分數,所以會出現一些舍入誤差。
您可能還會發現this article有幫助。
這是由於java中浮點類型的精度(float和double)造成的。如果你需要不確定的精度,你應該嘗試使用BigDecimal
而不是double
。
閱讀本問題與解答 - http://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples –
或此問答 - http://stackoverflow.com/questions/5257166/java-floats-and-doubles如何避免,即0-0-0-1-0-1-0-9000001 –
此外,半重複http://stackoverflow.com/questions/5423545/sum-of-decimal-number -in-java –