我知道有一些关于与delta进行双重比较的主题,这是比较double值的正确方法。
但是我的问题是关于将双精度值与常量进行比较。 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位小数的精度。