É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.
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
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));
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
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
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);
}