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

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

250
demandé sur Francesco Menzani 2009-09-22 00:09:21

5 réponses

Utilisation de la statique Double.isNaN(double) méthode, ou votre Double's .isNaN() la méthode.

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

Faire simplement:

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

Est insuffisant en raison de la définition de la norme IEEE pour les nombres Nan et à virgule flottante.

419
répondu Ben S 2018-09-19 00:31:08

Essayer Double.isNaN():

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

Notez que [double.isNaN()] ne fonctionnera pas, car les doubles non boxés n'ont pas de méthodes associées.

43
répondu Andrew Hare 2015-11-07 12:36:58

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 infinity.

/**
 * 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)
10
répondu Grzegorz Gajos 2016-06-29 13:38:20

, 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 globale.

10
répondu HyperNeutrino 2017-01-07 01:13:07

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
-1
répondu p.g.gajendra babu 2014-12-24 07:28:28