Como você testa para ver se um double é igual a NaN?

Eu tenho um duplo em Java e quero verificar se é NaN . Qual é a melhor maneira de fazer isso?

Use o Double.isNaN(double) estático Double.isNaN(double) ou o método Double ‘s .isNaN() .

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

Simplesmente fazendo:

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

não é suficiente devido a como o padrão IEEE para NaN e números de ponto flutuante é definido.

Tente Double.isNaN() :

Retorna true se esse valor Double for um Não-Número (NaN), caso contrário, false.

Observe que [ double.isNaN() ] não funcionará, porque as duplas não encheckboxdas não possuem methods associados a elas.

Você pode querer considerar também verificar se um valor é finito via Double.isFinite(value) . Desde o Java 8 existe um novo método na class Double onde você pode verificar de uma só vez se um valor não for 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) 

Você pode verificar NaN usando var != var . NaN não é igual a NaN .

EDIT : Este é provavelmente, de longe, o pior método. É confuso, terrível para a legibilidade e práticas ruins em geral.

Iniciantes precisam de exemplos práticos. então tente o seguinte código.

 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 
Intereting Posts