Ich habe ein Double in Java und möchte überprüfen, ob es ist NaN
. Was ist der beste Weg, dies zu tun?
Ich habe ein Double in Java und möchte überprüfen, ob es ist NaN
. Was ist der beste Weg, dies zu tun?
Antworten:
Verwenden Sie die statische Double.isNaN(double)
Methode oder Ihre Double
‚s - .isNaN()
Methode.
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
Einfach machen:
if (var == Double.NaN) {
...
}
ist nicht ausreichend, da der IEEE-Standard für NaN- und Gleitkommazahlen definiert ist.
Double.isNaN should be (true)
nette Antwort
value == Double.NaN
funktioniert nicht, funktioniert aber Double.isNaN(value)
einwandfrei.
Versuchen Sie Double.isNaN()
:
Gibt true zurück, wenn dieser Double-Wert eine Not-a-Number (NaN) ist, andernfalls false.
Beachten Sie, dass [ double.isNaN()
] nicht funktioniert, da Doppelpacks ohne Box keine Methoden zugeordnet sind.
Double.isNan()
und nicht double.IsNan()
, oder?
Möglicherweise möchten Sie auch prüfen, ob ein Wert über endlich ist Double.isFinite(value)
. Seit Java 8 gibt es eine neue Methode in der Double
Klasse, mit der Sie sofort ü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 mit NaN nach NaN suchen var != var
. NaN
ist nicht gleich NaN
.
EDIT : Dies ist wahrscheinlich die mit Abstand schlechteste Methode. Es ist verwirrend, schrecklich für die Lesbarkeit und insgesamt schlechte Praxis.
isNan
besser für die Lesbarkeit, aber er funktioniert, oder? Und die isNan
Methode verwendet dies, um zu überprüfen NaN
.
isNaN
tut dies unter der Haube, aber wie funktioniert es? Wie gleicht sich etwas nicht?
Anfänger brauchen praktische Beispiele. Versuchen Sie also den folgenden Code.
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