J'ai un double en Java et je veux vérifier si c'est le cas NaN
. Quelle est la meilleure façon de procéder?
J'ai un double en Java et je veux vérifier si c'est le cas NaN
. Quelle est la meilleure façon de procéder?
Réponses:
Utilisez la statique Double.isNaN(double)
méthode ou votre Double
de » .isNaN()
méthode.
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
Faire simplement:
if (var == Double.NaN) {
...
}
n'est pas suffisant en raison de la définition de la norme IEEE pour le NaN et les nombres à virgule flottante .
Double.isNaN should be (true)
belle réponse
value == Double.NaN
ne fonctionne pas, mais Double.isNaN(value)
fonctionne très bien.
Essayez Double.isNaN()
:
Renvoie true si cette valeur Double est un Not-a-Number (NaN), false sinon.
Notez que [ double.isNaN()
] ne fonctionnera pas, car les doubles sans boîte n'ont pas de méthodes associées.
Double.isNan()
et non double.IsNan()
, non?
Vous pouvez également envisager de vérifier si une valeur est finie via Double.isFinite(value)
. Depuis Java 8, il y a une nouvelle méthode dans la Double
classe où vous pouvez vérifier immédiatement si une valeur n'est pas NaN et l'infini.
/**
* 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)
Vous pouvez vérifier NaN en utilisant var != var
. NaN
n'est pas égal NaN
.
EDIT : C'est probablement de loin la pire méthode. C'est déroutant, terrible pour la lisibilité et mauvaise pratique globale.
isNan
est meilleure pour la lisibilité, mais cela fonctionne, non? Et la isNan
méthode utilise cela pour vérifier NaN
.
isNaN
fait cela sous le capot, mais comment ça marche? Comment quelque chose ne s'égale pas ??
Les débutants ont besoin d'exemples pratiques. essayez donc le code suivant.
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