Ce face Double.isNaN
NaN (Not a Number) este o valoare specială de tip double, produsă de calcule nedefinite: 0.0 / 0.0, Math.sqrt(-1), Math.log(-5). Un calcul cu double nu aruncă excepții, ci produce NaN sau Infinity, iar NaN se „lipește” de toate calculele care urmează.
Particularitatea lui NaN: nu este egal cu nimic, nici cu el însuși. x == Double.NaN este mereu false. Singura verificare corectă este Double.isNaN(x) (sau metoda de obiect x.isNaN() pe un Double). Pentru infinit există Double.isInfinite, iar pentru „număr obișnuit” Double.isFinite.
Parametri
| Parametru | Descriere |
|---|---|
v |
Valoarea verificată. |
Ce returnează
true dacă valoarea este NaN.
Exemple
Exemplul 1: De unde apare NaN
public class Main {
public static void main(String[] args) {
double a = 0.0 / 0.0;
double b = Math.sqrt(-4);
double c = 5.0 / 0.0;
System.out.println(a + " " + b + " " + c);
System.out.println(Double.isNaN(a) + " " + Double.isNaN(b) + " " + Double.isNaN(c));
System.out.println(a == Double.NaN);
System.out.println(a + 100);
System.out.println(Double.isInfinite(c));
}
}
Rezultat
NaN NaN Infinity
true true false
false
NaN
true
Exemplul 2: Media unei liste goale
Împărțirea 0.0 / 0 dă NaN; verificăm înainte de a afișa.
public class Main {
static double medie(double[] note) {
double suma = 0;
for (double n : note) {
suma += n;
}
return suma / note.length;
}
public static void main(String[] args) {
double[][] clase = {{9, 10, 8}, {}};
for (double[] note : clase) {
double m = medie(note);
if (Double.isNaN(m)) {
System.out.println("Nicio notă încă");
} else {
System.out.println("Media: " + m);
}
}
}
}
Rezultat
Media: 9.0
Nicio notă încă
Greșeli frecvente
- Scrii
if (x == Double.NaN): condiția nu este adevărată niciodată. FoloseșteDouble.isNaN(x). - Te aștepți ca împărțirea la zero cu
doublesă arunce excepție. Doar împărțirea întreagă (int/long) aruncăArithmeticException.
Comenzi înrudite
Double.parseDouble: Double este wrapperul pentru double; parseDouble și valueOf transformă un text ca „3.75” în număr cu zecimale.Double.compare: Compară două valori double și returnează negativ, 0 sau pozitiv, tratând corect NaN și -0.0.Math.sqrt: sqrt() calculează rădăcina pătrată, cbrt() rădăcina cubică (care funcționează și pentru numere negative).Math.log: log() dă logaritmul natural (baza e), log10() logaritmul în baza 10, iar log1p(x) calculează precis ln(1 + x).