web-dev-qa-db-fra.com

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

J'ai un double dans Java et je veux vérifier si c'est NaN. Quelle est la meilleure façon de procéder?

270
Eric Wilson

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

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

Faire simplement:

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

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

452
Ben S

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 doublons sans boîte ne sont associés à aucune méthode.

45
Andrew Hare

Vous voudrez peut-être aussi 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 en même temps 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)
12
Grzegorz Gajos

Vous pouvez vérifier NaN en utilisant var != var. NaN n'est pas égal à NaN.

EDIT: C’est probablement de loin la pire des méthodes. C'est déroutant, terrible pour la lisibilité et globalement une mauvaise pratique.

9
HyperNeutrino

Les débutants ont besoin d'exemples pratiques. alors essayez 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
0
p.g.gajendra babu

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

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

0
Teela