Ce face double.roundToDouble
Aceste metode fac aceleași rotunjiri ca round, floor și ceil, dar returnează un double: 2.6.roundToDouble() este 3.0. Sunt utile când continui calculele cu numere reale și nu vrei conversii între tipuri.
Spre deosebire de variantele care dau int, ele nu aruncă eroare la valori speciale: double.infinity.roundToDouble() rămâne infinit, iar NaN rămâne NaN. Există și truncateToDouble().
Un truc des folosit: rotunjirea la 2 zecimale ca număr, (x * 100).roundToDouble() / 100.
Ce returnează
Un double.
Exemple
Exemplul 1: Cele trei rotunjiri
void main() {
for (var x in [2.4, 2.5, -2.5, -2.6]) {
print('$x: round=${x.roundToDouble()} floor=${x.floorToDouble()} ceil=${x.ceilToDouble()}');
}
print(double.infinity.roundToDouble());
}
Rezultat
2.4: round=2.0 floor=2.0 ceil=3.0
2.5: round=3.0 floor=2.0 ceil=3.0
-2.5: round=-3.0 floor=-3.0 ceil=-2.0
-2.6: round=-3.0 floor=-3.0 ceil=-2.0
Infinity
Exemplul 2: Rotunjirea la zecimale
double rotunjeste(double x, int zecimale) {
var factor = 1.0;
for (var i = 0; i < zecimale; i++) {
factor *= 10;
}
return (x * factor).roundToDouble() / factor;
}
void main() {
print(rotunjeste(9.4567, 2));
print(rotunjeste(9.4567, 1));
var treime = 10 / 3;
print(treime);
print(rotunjeste(treime, 2));
}
Rezultat
9.46
9.5
3.3333333333333335
3.33
Greșeli frecvente
- Folosești rezultatul ca index de listă:
lista[x.floorToDouble()]nu compilează, indexul trebuie să fieint. Foloseștex.floor().
Comenzi înrudite
int.round: Metodele de rotunjire din num: pe un int returnează chiar numărul; pe un double dau cel mai apropiat întreg.double.toInt: toInt() transformă un număr în int tăind zecimalele; toDouble() transformă un int în double.double: Tipul pentru numere cu zecimale (virgulă mobilă, 64 de biți): prețuri, medii, temperaturi.