以下例程预计会返回 1 ,但会返回 0.9999999999999999 。
double sum = 0;
for(int i=0; i<10; i++){
sum+=0.1;
}
System.out.println(sum);
其他java数学运算也会出现同样的错误。
有没有办法避免这个问题?
提前谢谢。
答案 0 :(得分:1)
这就是所谓的浮点错误。这很自然,也很值得期待。避免它的方法是使用具有更高精度的变量,例如BigDecimal
。但是BigDecimal
执行计算的速度较慢,因此请考虑准确性在解决方案中的重要性。
如果这些数量代表货币,我建议使用BigDecimal
尽管有任何表现命中。在这种情况下,更重要的是你的计算是正确的。