Impossible de trouver ou de trouver une solution à ce problème qui fonctionne avec Dart.
J'ai déjà essayé:
1. toStringAsFixed () - ce tour
2. double.parse (number.toStringAsFixed ()) - ce tour
3. num - num% 0.01 - cette ronde
J'ai trouvé des solutions sur SO, mais elles utilisent des fonctions qui ne sont pas disponibles sur Flutter / Dart ou qui ne fonctionnent pas pour moi.
Toute aide serait grandement appréciée.
3 Réponses :
Essayer
double truncateToHundreths(num value) => (value * 100).truncate() / 100;
Il y aura des cas où vous perdez de la précision, mais cela vous oblige à utiliser presque tous les 53 bits de double précision dans le nombre (lorsque la multiplication par 100 perd en précision pour commencer).
Passer aux chaînes de creux est une surcharge importante que j'éviterais si possible, à moins que vous ne vous attendiez à convertir le nombre en chaîne de toute façon par la suite.
Merci :) Je vous remercie vraiment de prendre votre temps pour m'aider!
(value * 100).truncateToDouble() / 100
Exemple:
var lat = 29.4562
lat * 100 = 2945,62
2945,62 truncateToDouble()
= 2945
2945/100 = 29,45
Les réponses basées uniquement sur le code peuvent résoudre le problème, mais elles sont beaucoup plus utiles si vous expliquez comment elles le résolvent. La communauté a besoin de théorie et de code pour comprendre pleinement votre réponse.
Pour construire sur @Irn beautiful Answer.
La fonction ci-dessous vous permet de spécifier combien de chiffres fractionnaires / combien de décimales vous voulez
4321.92385678.truncateToDecimalPlace(3); // 4321.923
Exemple
extension TruncateDoubles on double { double truncateToDecimalPlaces(int fractionalDigits) => (this * pow(10, fractionalDigits)).truncate() / pow(10, fractionalDigits); }
Ou ma façon préférée est d'utiliser les extensions Dart
truncateToDecimalPlace(4321.92385678, 3) // 4321.923
Cela vous permet d'appeler la fonction sur un double objet comme ainsi
Usage
double truncateToDecimalPlaces(num value, int fractionalDigits) => (value * pow(10, fractionalDigits)).truncate() / pow(10, fractionalDigits);