double în Dart

Tipul pentru numere cu zecimale (virgulă mobilă, 64 de biți): prețuri, medii, temperaturi.

Sintaxă
abstract final class double extends num
static const double maxFinite = 1.7976931348623157e+308

Ce face double

double ține numere cu zecimale în formatul IEEE 754 pe 64 de biți: 9.5, -0.25, 1e6 (un milion). Are aproximativ 15–17 cifre semnificative. Separatorul zecimal în cod este mereu punctul.

Multe zecimale nu pot fi ținute exact în binar, așa că 0.1 + 0.2 dă 0.30000000000000004. Pentru comparații folosește o toleranță ((a - b).abs() < 1e-9), iar pentru bani ține sumele ca întregi (bani, nu lei).

double.maxFinite este cea mai mare valoare finită. Peste ea rezultatul devine double.infinity. Un literal întreg poate fi atribuit direct unui double: double x = 5; devine 5.0.

Exemple

Exemplul 1: Calcule cu zecimale

void main() {
  double pret = 12.5;
  double reducere = 0.15;
  var pretRedus = pret * (1 - reducere);
  print(pretRedus);
  print(0.1 + 0.2);
  print((0.1 + 0.2 - 0.3).abs() < 1e-9);
  double x = 5;
  print(x);
  print(1e6);
}

Rezultat

10.625
0.30000000000000004
true
5.0
1000000.0

Exemplul 2: Limitele lui double

void main() {
  print(double.maxFinite);
  print(double.maxFinite * 2);
  print(double.minPositive);
  print(1 / 3);
}

Rezultat

1.7976931348623157e+308
Infinity
5e-324
0.3333333333333333

Greșeli frecvente

  • Compari direct 0.1 + 0.2 == 0.3: rezultatul este false. Compară cu o toleranță.
  • Ții prețurile ca double și aduni multe sume: erorile mici se adună. Folosește întregi (bani) și împarte la 100 doar la afișare.

Comenzi înrudite

  • double.parse: Transformă un text în număr cu zecimale; parse aruncă FormatException, tryParse returnează null.
  • double.toInt: toInt() transformă un număr în int tăind zecimalele; toDouble() transformă un int în double.
  • int: Tipul pentru numere întregi (fără zecimale): vârste, cantități, note, indici.
  • num: Tipul comun pentru int și double: o variabilă num poate ține orice număr.
  • double.infinity: Valoarea „infinit” pentru double; isInfinite și isFinite verifică dacă un număr este infinit sau finit.