如何避免原语的计算错误

How to avoid calculation mistakes with primitives

下面的例程应该是 return 1,但它 returns 0.9999999999999999

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

其他 java 数学运算也会出现同样的错误。

有什么办法可以避免这个问题吗?

提前致谢。

这就是所谓的浮点错误。这是自然的,也是意料之中的。避免它的方法是使用精度更高的变量,例如BigDecimal。但是 BigDecimal 执行计算速度较慢,因此请考虑准确性在您的解决方案中的重要性。

如果这些数量代表货币,我建议使用 BigDecimal,尽管性能会受到影响。在这种情况下,正确计算比快速计算更重要。