java - 如何避免基元的计算错误

标签 java primitive

以下例程预计返回 1,但实际上返回 0.9999999999999999

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

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

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

提前谢谢您。

最佳答案

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

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

关于java - 如何避免基元的计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38226686/

相关文章:

java - Java中是否有类似于C++中的引用类型 "&"的东西?

C#正确高效的 double 到十进制的转换

java - 如何停止 intent.ACTION_CALL 一旦开始?

java - 当涉及驱逐时,Spring 的缓存注解是否可以安全使用?

JavaFX 和 OpenJDK

java - Java中控制键盘输入

java - 原始包装类中的问题

java - 我们可以将包装类更改为原始数据类型吗?

java - 转换为通用原始类。方法运行没有任何异常,如何以及为什么?

java - 为什么将 boolean 原始值更改为 boolean 对象引用?