0
以下例程預計將返回,但它將返回0.9999999999999999。如何避免計算錯誤與原語
double sum = 0;
for(int i=0; i<10; i++){
sum+=0.1;
}
System.out.println(sum);
其他java數學運算也會發生同樣的錯誤。
有什麼辦法可以避免這個問題嗎?
預先感謝您。
以下例程預計將返回,但它將返回0.9999999999999999。如何避免計算錯誤與原語
double sum = 0;
for(int i=0; i<10; i++){
sum+=0.1;
}
System.out.println(sum);
其他java數學運算也會發生同樣的錯誤。
有什麼辦法可以避免這個問題嗎?
預先感謝您。
這就是所謂的浮點錯誤。這很自然,也是值得期待的。避免它的方法是使用更高精度的變量,如BigDecimal
。然而,BigDecimal
執行計算較慢,所以請考慮在您的解決方案中準確性的重要性。
如果這些數量代表貨幣,我會推薦使用BigDecimal
,儘管有任何性能命中。在這種情況下,更重要的是你的計算是正確的。
這不是一個錯誤。這是浮點運算的本質。 – meskobalazs
浮點運算本質上不準確。你可以用'''BigDecimal''嘗試,但速度要慢很多。 –
我想你可以圍繞它,如果你只需要整數 – Zac