使用java语言一段代码检测两个double型数是否相等。代码应该能分辨这两个数是否是无穷大或者为空。如果他们相等,代码能正确显示这两个数。
时间: 2024-09-15 13:07:27 浏览: 41
在Java中,检测两个`double`类型的数值是否相等时,需要考虑精度问题以及无穷大和NaN的情况。你可以使用`equals()`方法配合自定义的比较规则来处理。以下是一段示例代码:
```java
public class DoubleEqualityCheck {
public static void main(String[] args) {
double num1 = Double.NaN; // 代表Not a Number
double num2 = Double.POSITIVE_INFINITY; // 代表正无穷大
double finiteNum1 = 0.0;
double finiteNum2 = 0.0;
// 检查数值是否相等(排除无穷大、NaN)
boolean areEqualFinite = checkEquality(finiteNum1, finiteNum2);
if (areEqualFinite) {
System.out.println("finiteNum1 and finiteNum2 are equal: " + finiteNum1);
} else {
System.out.println("finiteNum1 and finiteNum2 are not equal");
}
// 检查无穷大情况
boolean isInfinity = checkInfinity(num1, num2);
if (isInfinity) {
System.out.println(num1 + " and " + num2 + " are both infinity");
}
}
// 自定义比较方法,忽略精度误差和无穷大
private static boolean checkEquality(double num1, double num2) {
return Math.abs(num1 - num2) < Double.MIN_NORMAL && !Double.isInfinite(num1) && !Double.isInfinite(num2) && !Double.isNaN(num1) && !Double.isNaN(num2);
}
// 检查两个值是否都是无穷大
private static boolean checkInfinity(double num1, double num2) {
return Double.isInfinite(num1) && Double.isInfinite(num2);
}
}
```
阅读全文