double.nan în Dart

NaN („Not a Number”) este rezultatul unui calcul fără sens, ca 0/0; isNaN îl detectează.

Sintaxă
static const double nan = 0.0 / 0.0
bool get isNaN

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ște x.isNaN.
  • Apelezi toInt() sau round() 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.