0
votes

Tronquer à 2 décimales sans arrondir

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.


0 commentaires

3 Réponses :


1
votes

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.


1 commentaires

Merci :) Je vous remercie vraiment de prendre votre temps pour m'aider!



1
votes

(value * 100).truncateToDouble() / 100

Exemple:
var lat = 29.4562

lat * 100 = 2945,62
2945,62 truncateToDouble() = 2945
2945/100 = 29,45


1 commentaires

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.



0
votes

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);


0 commentaires