2012-05-28 50 views
1

我想知道爲什麼我得到這個錯誤。 (這是Eclipse調試的顯示日誌)Java雙精度總和問題

var 
    (double) 2.8 
tot.getIva() 
    (java.lang.Double) 0.17 
var+tot.get() 
    (double) 2.9699999999999998 

我不明白爲什麼我沒有得到簡單的2.97!

+1

閱讀本問題與解答 - http://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples –

+0

或此問答 - http://stackoverflow.com/questions/5257166/java-floats-and-doubles如何避免,即0-0-0-1-0-1-0-9000001 –

+1

此外,半重複http://stackoverflow.com/questions/5423545/sum-of-decimal-number -in-java –

回答

10

如果你想2.97,你應該使用BigDecimal

double s作爲小數存儲在二進制,而不是小數。例如,3.75僅存儲爲2^1 + 2^0 + 2^(-1) + 2^(-2)

2.80.17不能完全表示爲二進制分數,所以會出現一些舍入誤差。

您可能還會發現this article有幫助。

1

這是由於java中浮點類型的精度(float和double)造成的。如果你需要不確定的精度,你應該嘗試使用BigDecimal而不是double