Eu tenho um duplo em Java e quero verificar se é NaN
. Qual é a melhor maneira de fazer isso?
283
Use a estática Double.isNaN(double)
método, ou o seu Double
's .isNaN()
método.
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
Simplesmente fazendo:
if (var == Double.NaN) {
...
}
não é suficiente devido à definição do padrão IEEE para NaN e números de ponto flutuante .
Double.isNaN should be (true)
resposta agradávelvalue == Double.NaN
não funciona, masDouble.isNaN(value)
funciona bem.Tente
Double.isNaN()
:Observe que [
double.isNaN()
] não funcionará, porque as duplas sem caixa não têm métodos associados a elas.fonte
Double.isNan()
e nãodouble.IsNan()
, certo?Convém verificar também se um valor é finito via
Double.isFinite(value)
. Desde o Java 8, existe um novo método naDouble
classe em que você pode verificar imediatamente se um valor não é NaN e infinito.fonte
Você pode verificar o NaN usando
var != var
.NaN
não é igualNaN
.EDIT : Este é provavelmente o pior método. É confuso, terrível para facilitar a leitura e as más práticas gerais.
fonte
isNan
é melhor para facilitar a leitura, mas funciona, certo? E oisNan
método usa isso para verificarNaN
.isNaN
faz isso sob o capô, mas como funciona? Como algo não se iguala ??Iniciantes precisa de exemplos práticos. então tente o seguinte código.
fonte
O trecho de código abaixo ajudará a avaliar o tipo primitivo que contém NaN.
double dbl = Double.NaN; Double.valueOf(dbl).isNaN() ? true : false;
fonte