将双精度值与双精度常量进行比较

Comparing a double value with a double constant

我知道有一些关于使用 delta 进行双重比较的主题,这是比较双精度值的正确方法。

但是我的问题是关于将双精度值与常量进行比较。 JVM 是否有可能以错误的精度存储值 0(例如,从 xml 读取)?有没有可能:

double constant = 0.0;
double reference = readValueFromDocument();//which is 0

boolean result = constant == reference;

result 不会一直是 true?

以更一般的方式,问题听起来应该是这样的:JVM 是在赋值期间以错误的精度存储双精度常量,还是只对计算有效?

0.0、0.00 或 0 可以精确表示为 8 字节双精度数。 0.2 没有。你的情况恰好总是正确的。只有当变量计算为 0.1-0.2+0.1 时,您才可以预期会有小的偏差。这对浮点的所有计算机语言都有效。 double 也没有精度。

对于财务软件BigDecimal,定点精度,scale往往是更好的选择。 new BigDecimal("12.00") 给出小数点后 2 位小数的精度。