在Java中检查两个双精度数之间的相等性的好方法是什么

kak*_*oli 8 java

对于 Double/Float,从十进制转换为二进制表示形式时,会存在一些舍入误差和精度损失。例如,将 float 设置为“6.1”,然后再次打印出来,您可能会得到类似于“6.099999904632568359375”的报告值。检查 2 个 Double 对象的相等性的更好选择是:使用 BigDecimal 或 (Math.abs(double1 - double2) < epsilon)

Bur*_*ard 5

这取决于您的用例。如果您使用货币,请选择 BigDecimal。否则,如果您可以接受近似值,请使用Math.abs(double1 - double2) < epsilon


小智 5

有了番石榴,您将拥有:

DoubleMath.fuzzyEquals(double a, double b, double tolerance)
Run Code Online (Sandbox Code Playgroud)

DoubleMath.fuzzyCompare(double a, double b, double tolerance)
Run Code Online (Sandbox Code Playgroud)

它们比编写“Math.abs(ab) <= EPSILON”更容易使用且更正确。它们涵盖了 Double.NaN 和无穷大的情况。