如何在Java中比较两个双精度值?

2022-08-31 13:29:04

在Java中对两个双精度值进行简单比较会产生一些问题。让我们考虑以下 Java 中的简单代码片段。

package doublecomparision;

final public class DoubleComparision 
{
    public static void main(String[] args) 
    {
        double a = 1.000001;
        double b = 0.000001;

        System.out.println("\n"+((a-b)==1.0));
    }
}

上面的代码似乎返回表达式的求值,但它没有。相反,它返回是因为此表达式的计算值实际上是预期的不等于,因此,条件的计算结果为布尔值 。克服这种情况的最佳和建议的方法是什么?true((a-b)==1.0)false0.99999999999999991.01.0false


答案 1

基本上,你不应该做精确的比较,你应该做这样的事情:

double a = 1.000001;
double b = 0.000001;
double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {...}

答案 2

请不要使用双精度字母作为十进制算术,而是使用java.math.BigDecimal。它将产生预期的结果。

作为参考,请查看此堆栈溢出问题


推荐