将双值与双常数进行比较



我知道有一些关于与delta进行双重比较的主题,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,具有精度的不动点,刻度通常是更好的选择。new BigDecimal("12.00")给出小数点后2位小数的精度。

最新更新