Question

J'ai un double en Java et je veux vérifier si elle est NaN. Quelle est la meilleure façon de le faire?

Était-ce utile?

La solution

Autres conseils

Double.isNaN() :

  

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

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

Vous voudrez peut-être envisager de vérifier également si une valeur est finie par Double.isFinite(value). Depuis Java 8 il y a une nouvelle méthode en classe Double où vous pouvez vérifier à la fois si une valeur est 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 ne correspond pas à NaN.

EDIT : Ceci est probablement de loin la pire méthode. Il est déroutant, terrible pour la lisibilité, et une mauvaise pratique générale.

Les débutants a 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

L'extrait de code ci-dessous vous aidera à évaluer le type primitif tenant NaN.

double dbl = Double.NaN; Double.valueOf(dbl).isNaN() ? true : false;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top