Bonjour,
J'ai dans un script une valeur que je reçois en type double et que je dois convertir en string et garder 2 chiffres après la virgule (sans arrondir).
Le problème est que le .toString("N2") arrondit automatiquement, de même que la conversion en int.
J'ai donc opté pour une autre solution, qui consiste à convertir la partie après la virgule en int en arrondissant à l'entier du dessous (Math.Floor).
Problème, sur une valeur, lorsque je multiplie la partie de deux chiffres après la virgule par 100 (pour avoir la partie entière), il me ressort une valeur illogique (voir les commentaires du code ci-dessous).
Avez-vous une solution ?
Merci
Concrètement voici le principe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Double valeur = item.maValeur.Value; // 1001.29 int valeur1 = Convert.ToInt32(Math.Floor(valeur)); Double valeur1Double = Convert.ToDouble(valeur1); Double valeur2Double = valeur - valeur1Double; // 0.29 Double total = valeur2Double * 100; // lorsque je fais total.toString() il me renvoie 28.99999994 au lieu de 29 int valeur2 = Convert.ToInt32(Math.Floor(total)); // ici le 29,0 est convertit en 28...
Je récupère la valeur double.
Je converti en int pour garder la partie entière.
Je reconverti en double pour faire l'opération suivante : soustraire pour garder uniquement la partie après la virgule.
Je multiplie par 100 et je reconvertis en int pour avoir les 2 chiffres tels quels de la partie décimale (donc pas eu d'arrondi)
Je concatène le partie entière et décimale dans un string.
Partager