Mam podwójne w Javie i chcę sprawdzić, czy tak jest NaN
. Jak najlepiej to zrobić?
283
Użyj statycznej Double.isNaN(double)
metody, albo zwrot Double
„s .isNaN()
metody.
// 1. static method
if (Double.isNaN(doubleValue)) {
...
}
// 2. object's method
if (doubleObject.isNaN()) {
...
}
Po prostu robiąc:
if (var == Double.NaN) {
...
}
nie jest wystarczający ze względu na sposób zdefiniowania standardu IEEE dla liczb NaN i liczb zmiennoprzecinkowych .
Double.isNaN should be (true)
niezła odpowiedźvalue == Double.NaN
nie działa, aleDouble.isNaN(value)
działa dobrze.Spróbuj
Double.isNaN()
:Zauważ, że [
double.isNaN()
] nie będzie działać, ponieważ do dublowanych rozpakowanych nie są powiązane z nimi metody.źródło
Double.isNan()
i niedouble.IsNan()
, prawda?Możesz również rozważyć sprawdzenie, czy wartość jest skończona przez
Double.isFinite(value)
. Od wersji Java 8 istnieje nowa metoda wDouble
klasie, w której można od razu sprawdzić, czy wartość nie jest NaN i nieskończoność.źródło
Możesz sprawdzić NaN za pomocą
var != var
.NaN
nie jest równyNaN
.EDYCJA : To prawdopodobnie zdecydowanie najgorsza metoda. Jest to mylące, okropne dla czytelności i ogólnie złe praktyki.
źródło
isNan
poprawia czytelność, ale działa, prawda? AisNan
metoda wykorzystuje to do sprawdzeniaNaN
.isNaN
robi to pod maską, ale jak to działa? Jak coś się nie równa?Początkujący potrzebują praktycznych przykładów. więc wypróbuj następujący kod.
źródło
Poniższy fragment kodu pomoże ocenić typ pierwotny zawierający NaN.
double dbl = Double.NaN; Double.valueOf(dbl).isNaN() ? true : false;
źródło