用一段Java代码检测两个double型数是否相等。代码应该能分辨这两个数是否是无穷大或者为空。如果他们相等,代码能正确显示这两个数。
时间: 2024-09-22 13:06:12 浏览: 62
在Java中,我们通常使用`equals()`方法来比较`Double`类型的值,包括处理无穷大和`NaN`(非数字)。但是,直接使用`==`运算符比较`Double`可能会出现问题,因为`NaN`并不等于自身,即使是其他`NaN`也是如此。因此,我们需要使用`Double.doubleToLongBits()`方法将其转换为长整型进行比较,同时考虑它们是否为无穷大。
下面是一个示例代码:
```java
public class Main {
public static void main(String[] args) {
Double num1 = Double.NaN;
Double num2 = Double.POSITIVE_INFINITY;
if (Objects.equals(num1, num2)) {
System.out.println("num1 and num2 are equal or both NaN.");
} else if (num1.isInfinite() && num2.isInfinite()) {
System.out.println("Both numbers are infinite.");
} else if (num1.compareTo(num2) == 0) { // 对于非无穷大的情况,使用compareTo()
System.out.printf("num1 is %f, num2 is also %f%n", num1, num2);
} else {
System.out.println("Numbers are not equal.");
}
}
}
```
这个代码首先检查两个数是否都为`NaN`,然后检查是否都是无穷大。最后,如果不是无穷大,则通过`compareTo()`方法来比较它们,确保正确的数值比较。
阅读全文