我可以使用 Double.compare() 或 double.equals(otherDouble) 来比较 Java 中的两个 Double 对象吗?

问题描述 投票:0回答:1

我的机器环境是Mac M1,我使用的是JDK版本'1.8.0_332'。我有一个如下的@Test方法,其输出如下。

我想知道为什么 Double 和 Float 在精度和比较方面有差异。我在 StackOverflow 上搜索了很多与浮点比较相关的问题,其中很多都推荐使用 BigDecimal 进行精确的浮点比较。

我也在想是否可以使用 Double.equals() 来比较两个双精度数而不是构造 BigDecimal。因为构造 BigDecimal 可能有点麻烦,所以除非绝对必要,否则我不想让事情变得如此复杂。谢谢

@Test
    public void test00334() {
        Double a = 1.0d - 0.9d;
        Double b = 0.9d - 0.8d;
        System.out.println(a);
        System.out.println(b);
        if (a.equals(b)) {
            System.out.println("a==b");
        } else {
            System.out.println("a!=b");
        }

        Float a1 = 1.0f - 0.9f;
        Float b1 = 0.9f - 0.8f;
        System.out.println(a1);
        System.out.println(b1);
        if (a1.equals(b1)) {
            System.out.println("a1==b1");
        } else {
            System.out.println("a1!=b1");
        }
    }

输出:

0.09999999999999998
0.09999999999999998
a==b
0.100000024
0.099999964
a1!=b1
java double precision
1个回答
0
投票

offcurse!Double是引用类型,只要它们的地址相同,那么equals方法就返回true

© www.soinside.com 2019 - 2024. All rights reserved.