Wie testen Sie, ob ein Doppel zu NaN gleich ist?
Frage
Ich habe ein Doppel in Java und ich möchte überprüfen, ob es NaN
ist.
Was ist der beste Weg, dies zu tun?
Lösung
Verwenden Sie die statische Double.isNaN(double)
Methode oder Ihre Double
der IEEE-Standard für NaN und Gleitkommazahlen definiert ist.
Andere Tipps
Versuchen Sie Double.isNaN()
:
Gibt true zurück, wenn dieser Double-Wert einen Nicht-a-Number (NaN) ist, andernfalls false.
Beachten Sie, dass [double.isNaN()
] wird nicht funktionieren, weil unboxed Doppel mit ihnen verbunden sind keine Methoden haben.
Sie können auch die Überprüfung zu prüfen, ob ein Wert über Double.isFinite(value)
endlich ist. Da Java 8 gibt es eine neue Methode in Double
Klasse, wo man auf einmal überprüfen können, ob ein Wert nicht NaN und unendlich ist.
/**
* 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)
Sie können für NaN überprüfen, indem var != var
verwenden. NaN
nicht gleich NaN
.
Bearbeiten : Das ist wohl mit Abstand der schlechtesten Methode. Es ist verwirrend, schrecklich für die Lesbarkeit und die allgemeine schlechte Praxis.
Anfänger brauchen praktische Beispiele. so versucht, den folgenden Code ein.
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
Der folgende Code-Schnipsel hilft Urtyp bewerten halten NaN.
double dbl = Double.NaN;
Double.valueOf(dbl).isNaN() ? true : false;