web-dev-qa-db-fra.com

Comment arrondissez-vous un double en Dart avec un degré de précision donné APRÈS la virgule décimale?

Étant donné un double, je veux l'arrondir à un nombre donné de points de précision après le point décimal, similaire à la fonction round () de PHP.

La chose la plus proche que je peux trouver dans les documents Dart est double.toStringAsPrecision (), mais ce n'est pas tout à fait ce dont j'ai besoin car il comprend les chiffres avant le point décimal dans le total des points de précision.

Par exemple, en utilisant toStringAsPrecision (3):

0.123456789 rounds to 0.123  
9.123456789 rounds to 9.12  
98.123456789 rounds to 98.1  
987.123456789 rounds to 987  
9876.123456789 rounds to 9.88e+3

À mesure que l'amplitude du nombre augmente, je perds en conséquence la précision après la décimale.

38
Lucas Meadows

Voir les documents pour num.toStringAsFixed () .

Chaîne toStringAsFixed (int fractionDigits)

Renvoie une représentation sous forme de chaîne à virgule décimale.

Convertit cela en double avant de calculer la représentation sous forme de chaîne.

Si la valeur absolue de this est supérieure ou égale à 10 ^ 21, cette méthode renvoie une représentation exponentielle calculée par this.toStringAsExponential (). Sinon, le résultat est la représentation sous forme de chaîne la plus proche avec exactement des chiffres fractionDigits après le point décimal. Si fractionDigits est égal à 0, le point décimal est omis.

Le paramètre fractionDigits doit être un entier satisfaisant: 0 <= fractionDigits <= 20.

Exemples:

1.toStringAsFixed(3);  // 1.000
(4321.12345678).toStringAsFixed(3);  // 4321.123
(4321.12345678).toStringAsFixed(5);  // 4321.12346
123456789012345678901.toStringAsFixed(3);  // 123456789012345683968.000
1000000000000000000000.toStringAsFixed(3); // 1e+21
5.25.toStringAsFixed(0); // 5
72
Greg Lowe

num.toStringAsFixed () arrondit. Celui-ci vous transforme num (n) en une chaîne avec le nombre de décimales que vous voulez (2), puis le recompose en votre num dans une douce ligne de code:

n = num.parse(n.toStringAsFixed(2));
30
Yngvar Natland
void main() {
  int decimals = 2;
  int fac = pow(10, decimals);
  double d = 1.234567889;
  d = (d * fac).round() / fac;
  print("d: $d");
}

Tirages: 1,23

11
Robert
    var price=99.012334554;
price = price.toStringAsFixed(2);
print(price); // 99.01

C'est la référence de Dart. réf: https://api.dartlang.org/stable/2.3.0/Dart-core/num/toStringAsFixed.html

9
Rizwan Ansar

Les solutions ci-dessus n'arrondissent pas correctement les nombres. J'utilise:

double dp(double val, int places){ 
   double mod = pow(10.0, places); 
   return ((val * mod).round().toDouble() / mod); 
}
9
andyw