Ce face double.nan
double.nan este o valoare specială care înseamnă „nu este un număr”. Apare la calcule fără rezultat: 0 / 0, double.infinity - double.infinity, sqrt(-1) din dart:math.
NaN nu este egal cu nimic, nici cu el însuși: double.nan == double.nan este false. De aceea singura verificare corectă este proprietatea isNaN. Orice calcul cu NaN dă tot NaN, așa că o singură valoare greșită „strică” o sumă întreagă.
Ce returnează
isNaN: true dacă valoarea este NaN.
Exemple
Exemplul 1: NaN nu este egal cu el însuși
y este aceeași valoare ca x, totuși x == y este false. (Dacă scrii direct x == double.nan, dart analyze te avertizează că rezultatul este mereu false.)
void main() {
var x = 0 / 0;
var y = x;
print(x);
print(x == y);
print(x.isNaN);
print(x + 5);
print(double.infinity - double.infinity);
}
Rezultat
NaN
false
true
NaN
NaN
Exemplul 2: Media unei liste goale
double media(List<double> note) {
var suma = note.fold<double>(0, (a, b) => a + b);
return suma / note.length;
}
void main() {
var clase = {'9A': [9.5, 8.0, 10.0], '9B': <double>[]};
clase.forEach((clasa, note) {
var m = media(note);
print(m.isNaN ? '$clasa: fără note' : '$clasa: ${m.toStringAsFixed(2)}');
});
}
Rezultat
9A: 9.17
9B: fără note
Greșeli frecvente
- Verifici
if (x == double.nan): condiția este mereu falsă. Foloseștex.isNaN. - Apelezi
toInt()sauround()pe NaN: aruncăUnsupportedError.
Comenzi înrudite
double.infinity: Valoarea „infinit” pentru double; isInfinite și isFinite verifică dacă un număr este infinit sau finit.double: Tipul pentru numere cu zecimale (virgulă mobilă, 64 de biți): prețuri, medii, temperaturi.num: Tipul comun pentru int și double: o variabilă num poate ține orice număr.