📜  Java中的浮点比较()方法与示例(1)

📅  最后修改于: 2023-12-03 15:02:02.918000             🧑  作者: Mango

Java中的浮点比较

在Java中,浮点数不支持精确的比较,因为浮点数被表示为二进制小数。这就导致了一些精度上的问题。比如以下代码:

double a = 1.0 - 0.9;
double b = 0.9 - 0.8;
System.out.println(a == b); // false

其余更为深入的介绍请查阅这篇介绍

如果想要进行浮点数的比较,就需要使用 Java 中提供的 Double 类中的比较方法。这些方法包括以下四种:

| 方法名 | 描述 | | ------ | ----------------------------------------------------- | | isNaN() | 检查某个数是否是 Not-a-Number(NaN) | | isInfinite() | 检查某个数是否是正无穷、负无穷或无穷大 | | compareTo() | 比较两个指定的 double 值 | | equals() | 检查这个 Double 对象是否与另一个 Double 对象相等 |

其中最常用的是 equals() 方法。示例如下:

double a = 1.0001;
double b = 1.0002;
double c = 1.0001;
Double aa = a;
Double bb = b;
Double cc = c;

// 浮点数比较
System.out.println(Double.compare(a, b)); // -1
System.out.println(Double.compare(a, c)); // 0

// Double对象比较
System.out.println(aa.equals(bb)); // false
System.out.println(aa.equals(cc)); // true

值得注意的是,使用 equals() 方法进行浮点数的比较也有可能存在误差。因此,在实际开发中,需要根据具体情况来选择合适的比较方法。

另外,在 JDK1.5 之后,Java 也提供了 BigDecimal 类,可以实现精确计算和比较。示例代码如下:

BigDecimal d1 = new BigDecimal("1.0001");
BigDecimal d2 = new BigDecimal("1.0002");
BigDecimal d3 = new BigDecimal("1.0001");

// 精确计算
System.out.println(d1.subtract(d3)); // 0.0000
System.out.println(d1.subtract(d2)); // -0.0001

// 精确比较
System.out.println(d1.compareTo(d2)); // -1
System.out.println(d1.compareTo(d3)); // 0

总之,在浮点数的处理中,需要注意精度问题,选择合适的比较方法,才能保证正确性。