Tôi có một gấp đôi trong Java và tôi muốn kiểm tra nếu nó là NaN
. Cách tốt nhất để làm việc này là gì?
Tôi có một gấp đôi trong Java và tôi muốn kiểm tra nếu nó là NaN
. Cách tốt nhất để làm việc này là gì?
Câu trả lời:
Sử dụng các tĩnh Double.isNaN(double)
phương pháp, hoặc của bạn Double
's .isNaN()
phương pháp.
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
Đơn giản chỉ cần làm:
if (var == Double.NaN) {
...
}
là không đủ do cách xác định tiêu chuẩn IEEE cho NaN và số dấu phẩy động .
Double.isNaN should be (true)
câu trả lời hay
value == Double.NaN
không hoạt động, nhưng Double.isNaN(value)
chỉ hoạt động tốt.
Hãy thử Double.isNaN()
:
Trả về true nếu giá trị Double này là Not-a-Number (NaN), ngược lại là sai.
Lưu ý rằng [ double.isNaN()
] sẽ không hoạt động, vì các nhân đôi không được đóng hộp không có các phương thức liên quan đến chúng.
Double.isNan()
và không double.IsNan()
, phải không?
Bạn có thể muốn xem xét cũng kiểm tra nếu một giá trị là hữu hạn thông qua Double.isFinite(value)
. Vì Java 8 có một phương thức mới trong Double
lớp nơi bạn có thể kiểm tra cùng một lúc nếu một giá trị không phải là NaN và vô cùng.
/**
* Returns {@code true} if the argument is a finite floating-point
* value; returns {@code false} otherwise (for NaN and infinity
* arguments).
*
* @param d the {@code double} value to be tested
* @return {@code true} if the argument is a finite
* floating-point value, {@code false} otherwise.
* @since 1.8
*/
public static boolean isFinite(double d)
Bạn có thể kiểm tra NaN bằng cách sử dụng var != var
. NaN
không bằng nhau NaN
.
EDIT : Đây có lẽ là phương pháp tồi tệ nhất. Thật khó hiểu, khủng khiếp cho khả năng đọc và thực hành xấu tổng thể.
isNan
tốt hơn cho khả năng đọc, nhưng nó hoạt động, phải không? Và isNan
phương pháp sử dụng điều này để kiểm tra NaN
.
isNaN
Điều này dưới mui xe, nhưng làm thế nào nó hoạt động? Làm thế nào mà một cái gì đó không bằng chính nó ??
Người mới bắt đầu cần những ví dụ thực tế. vì vậy hãy thử đoạn mã sau.
public class Not_a_Number {
public static void main(String[] args) {
// TODO Auto-generated method stub
String message = "0.0/0.0 is NaN.\nsimilarly Math.sqrt(-1) is NaN.";
String dottedLine = "------------------------------------------------";
Double numerator = -2.0;
Double denominator = -2.0;
while (denominator <= 1) {
Double x = numerator/denominator;
Double y = new Double (x);
boolean z = y.isNaN();
System.out.println("y = " + y);
System.out.println("z = " + z);
if (z == true){
System.out.println(message);
}
else {
System.out.println("Hi, everyone");
}
numerator = numerator + 1;
denominator = denominator +1;
System.out.println(dottedLine);
} // end of while
} // end of main
} // end of class