我的机器环境是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
offcurse!Double是引用类型,只要它们的地址相同,那么equals方法就返回true