double.roundToDouble în Dart

Rotunjesc un double (la cel mai apropiat, în jos, în sus), dar rezultatul rămâne double.

Sintaxă
double roundToDouble()
double floorToDouble()
double ceilToDouble()

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ă fie int. Folosește x.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.