Comment testez-vous pour voir si un double est égal à NaN?

J’ai un double en Java et je veux vérifier s’il s’agit de NaN . Quelle est la meilleure façon de procéder?

Utilisez la Double.isNaN(double) statique Double.isNaN(double) ou la méthode Double.isNaN(double) votre Double .

 // 1. static method if (Double.isNaN(doubleValue)) { ... } // 2. object's method if (doubleObject.isNan()) { ... } 

Simplement faire:

 if (var == Double.NaN) { ... } 

n’est pas suffisant en raison de la définition de la norme IEEE pour NaN et des nombres à virgule flottante .

Essayez Double.isNaN() :

Renvoie true si cette valeur Double est un Non-a-Number (NaN), false sinon.

Notez que [ double.isNaN() ] ne fonctionnera pas, car les doubles unboxed ne sont pas associés à des méthodes.

Vous pouvez également envisager de vérifier si une valeur est finie via Double.isFinite(value) . Depuis Java 8, il existe une nouvelle méthode dans la classe Double 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 la mauvaise pratique générale.

Les débutants ont besoin d’exemples pratiques. Essayez donc le code suivant.

 public class Not_a_Number { public static void main(Ssortingng[] args) { // TODO Auto-generated method stub Ssortingng message = "0.0/0.0 is NaN.\nsimilarly Math.sqrt(-1) is NaN."; Ssortingng 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