2016-07-06 42 views
0

以下例程預計將返回,但它將返回0.9999999999999999如何避免計算錯誤與原語

double sum = 0; 
for(int i=0; i<10; i++){ 
    sum+=0.1; 
} 
System.out.println(sum); 

其他java數學運算也會發生同樣的錯誤。

有什麼辦法可以避免這個問題嗎?

預先感謝您。

+0

這不是一個錯誤。這是浮點運算的本質。 – meskobalazs

+1

浮點運算本質上不準確。你可以用'''BigDecimal''嘗試,但速度要慢很多。 –

+0

我想你可以圍繞它,如果你只需要整數 – Zac

回答

1

這就是所謂的浮點錯誤。這很自然,也是值得期待的。避免它的方法是使用更高精度的變量,如BigDecimal。然而,BigDecimal執行計算較慢,所以請考慮在您的解決方案中準確性的重要性。

如果這些數量代表貨幣,我會推薦使用BigDecimal,儘管有任何性能命中。在這種情況下,更重要的是你的計算是正確的。