Come fai a verificare se un doppio è uguale a NaN?

Ho un doppio in Java e voglio verificare se è NaN . Qual è il modo migliore per farlo?

Utilizzare il Double.isNaN(double) statico Double.isNaN(double) o il metodo Double .isNaN() .

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

Semplicemente:

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

non è sufficiente a causa della definizione dello standard IEEE per i numeri in virgola mobile e in virgola mobile .

Prova Double.isNaN() :

Restituisce true se questo valore Double è un Not-a-Number (NaN), falso altrimenti.

Nota che [ double.isNaN() ] non funzionerà, perché i doppi non in double.isNaN() non hanno metodi associati con loro.

Si potrebbe anche considerare di verificare se un valore è finito tramite Double.isFinite(value) . Da Java 8 c’è un nuovo metodo nella class Double cui è ansible verificare immediatamente se un valore non è NaN e infinito.

 /** * 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) 

Puoi verificare la presenza di NaN usando var != var . NaN non è uguale a NaN .

EDIT : Questo è probabilmente il metodo peggiore. È confusionario, terribile per la leggibilità e una ctriggers pratica complessiva.

I principianti hanno bisogno di esempi pratici. quindi prova il seguente codice.

 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