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 estefalse. 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.