Arrondir au centieme??

Résolu
lyoan Messages postés 5 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 10 octobre 2007 - 5 déc. 2006 à 15:43
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009 - 16 févr. 2009 à 15:57
Bonjour à tous,
Je voulais savoir si il existait une fonction qui permettrai d'arrondir un double au centieme?
Merci à vous
A voir également:

14 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
5 déc. 2006 à 16:30
Petite erreur dans le dernier exemple :

Math.Round(1.1251,2) donne 1.13

Amicalement, SharpMao
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
5 déc. 2006 à 16:24
Hello,

Il exista la méthode static Math.Round.

Tu peux lui donner en argument le nombre et le nombre de décimales.
Attention tout de même, comme il travail avec des nombre en virgule flottante, l'arrondi n'est pas forcémment très précis :

Math.Round(1.115,2) donne 1.12
Math.Round(1.125,2) donne 1.12
Math.Round(1.1151,2) donne 1.13

Amicalement, SharpMao
1
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
4 févr. 2009 à 12:20
Bonjour,

Je remonte ce topic afin de savoir si il n'y avais pas une technique qui permettait d'avoir un résultat vraiment très précis pour arrondire un double ? Car j'ai une erreur d'arrondis au centième a 0,01 :-( Et ca me fou tout en l'air car c'est pas acceptable dans le projet que je suis en train de réaliser :/
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
4 févr. 2009 à 16:31
Hello,

Si tu travailles avec de la monnaie, le seul moyen d'être vraiment précis, c'est d'utiliser des decimal à la place des double.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
4 févr. 2009 à 16:33
Je m'en doutais un peu, bon et bien je vais essayer ceci au plus vite ! Je tiens au courant. Merci
0
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
5 févr. 2009 à 16:24
Bon et bien non pour certains chiffres les arrondis sont mauvais et donc j'ai toujours un problème de cents.
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
5 févr. 2009 à 16:58
Hello,

Tu peux me donner un exemple, ça m'intéresse.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
6 févr. 2009 à 12:15
Bonjour,

Alors voila mon projet permet à l'utilisateur de crée un "Panier", dans ce panier il y a différents produits qui ont chacun un prix.
Lorsque l'utilisateur clic sur un produit, il se met dans le "Panier" et son prix TTC, HT, ca TVA Correspondante (5,5 Nourriture, 5,5 Boisson ou 19,6 Nourriture/Boisson), et le HT de la TVA correspondante subisse une MAJ (se sont toutes des TextBox).
Il y a 3 différents ensemble possibles regroupant chacun des produits >> Pizza, Produit et Produit Stocké (je vais pas m'étendre + la dessus c'est pas le sujet). Juste un truc à savoir, c'est que chacun de ces ensemble apelles leur classes spécifique avec des get/set dans la couche metier qui initialise les variables avec les bon prix (ils sont tous déclarer en Decimal) et dans la couche persistant il y a un objet OleDbDataReader qui recupère toutes les données du produit ajouter dans le Panier.
L'utilisateur a la possibiliter, a tout moment, de faire une reduction sur la TVA qu'il souhaite. Et c'est la ou j'ai mon problème, c'est que lors de certaines réduction, les arrondis se font mal.

Bref, voila pour l'explication du contexte.

L'exemple : Lorsque j'ajoute un Coca Cola Zero 1,5L ayant comme valeur monétaire suivante :
- 3 ? TTC
- 2,83? HT
- 0,17? TVA 5,5 Boisson
- 2,83? HT TVA 5,5 Boisson

et que je fais une reduction de 3?, tout es correct, j'ai bien 0,00? de partout.
Mais lorsque j'ajoute 2 Coca Cola Zero 1,5L, ca double bien les 4 valeurs, MAIS lorsque je fais une réduction de 6? alors je me retrouve avec ceci :
-> 0,00? TTC
-> 0,00? HT
-> 0,01? TVA 5,5 Boisson
-> -0,01 HT TVA 5,5 Boisson (içi j'ai un négatif :/)

J'ai donc un problème d'arrondis qui me fait tout foiré et j'avoue ne pas réussir a résoudre ce problème.
Je vous met la partie de code qui correspond a la reduction :

// Declaration des variables doubles + initialisation de celles-ci.
decimal reduc = 0m;
reduc =
decimal.Parse(tb_reduc.Text.Replace(
".",
","));

// Gestion du total ttc.
totTTC -= reduc;
// TVA 5,5 pour la Boisson coch‚

if (cb_TVA55B.Checked)
{

// TVA à 5,5 donc on * par 0,945 la reduction et on retrouve le HT du résultat
totHT += -(reduc * 0.945m);

// La TVA est = à la TVA 5,5 Boisson - ( Reduction * 0,055) que j'arrondi a 2 chiffres apres la ,
totTVA55B += -(reduc * 0.055m);

// Le montant totale HT de la TVA 5,5 Boisson est = Totale HT TVA 5,5 Boisson - (Reduc * 0,945)
totHTTVA55B += - ( reduc * 0.945m);
cb_TVA55B.Checked =
false;
}

Sachant que j'ai 3 Bloc IF qui correspond aux différentes TVA possible et que pour optimiser le code, à la fin de l'évènement j'appele une méthode qui arrondis les résultats et qui les met dans leurs TB respectifs, voici le code :
// J'utilise la classe Math pour pouvoir arrondir a 2 chiffres apres la , le resultat.

totHT =
Math.Round(totHT, 2);
tb_TotalHT.Text = totHT.ToString();

J'en met juste un car les autres suivent le même modèle.

Courage :-P
0
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
6 févr. 2009 à 12:16
Une petite précision, lorsque j'ai arrondis a 3 Chiffres après la virgule, je m'aperçois que pour l'etape a 3€ j'ai pas 0,00 mais 0,005, ce qui explique le 0,01 pour 6€ mais bon c'est pas normal :(
0
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
9 févr. 2009 à 17:38
Je viens aux nouvelles ? Est-ce que tu vois pourquoi je me fais avoir ?
Une particularité que j'ai isoler dans ce problème : Ma réduction ne marche pas uniquement lorsque je veux réduire la TVA selectionner à 0. Peut-etre tous simplement le langage qui gère mal ceci ?
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
10 févr. 2009 à 13:17
Hello,

Je pense que c'est tout à fait normal.

Pour calculer correctement, tu calcules la tva, tu l'arrondis, puis tu calcules le montant hors taxes en faisant la différence entre le total TTC et la tva.
De cette manière, pas de centime résiduel.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
10 févr. 2009 à 14:26
Je ne peux pas calculer le montant hors taxes en faisant la différence entre le total TTC et la TVA, car si lors de la même commande j'ajoute un produit sur une autre TVA et bien le montant TTC lui va augmenter et donc le motant hors taxe de la TVA va également monter alors que ce n'est pas ce qu'il doit faire. Pour être plus concret :

- J'ajoute un produit de 15€ qui est soumis a la TVA 5,5 Nourriture

On à le TTC a 15 €
la TVA 5,5 qui est à 0,825 donc arrondis a 0,83€ avec la méthode math.round()
le HT Total qui est de 14,17€
et le HT TVA 5,5 à 14,17€.

- Maintenant j'ajoute un produit de 30€ qui est soumis à la TVA 19,6 boisson

On a le TTC a 45 €
La TVA 5,5 a 0,83€
Le HT TVA 5,5 a 14,17€
La TVA 19,6 à 5,88€
Le HT TVA 19,6 a 24,12€
Et le HT Total a 38,28€
0
skupiewski Messages postés 1 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 16 février 2009
16 févr. 2009 à 15:54
Salut à tous.
J'ai exacement la même problème.

Selon le MSDN de Microsoft, l'arrondi de 4.5 donne 4 et l'arrondi de 5.5 donne 6.

Cela revient à dire que 1+1 est parfois égal à 2  et parfois pas.

Effectivement, la méthode Math.Round donne ces résultats. Je me demande à quoi peut bien servir une telle fonction.

Soit je suis completement largé, soit, comme d'habitude, on ne peut vraiement pas faire confiance en Microsoft, même pour un bièce de calcul débile.

 Je cherche (je rage), déja,  depuis une heure comment faire ce simple arrondi.
Si il existe une autre méthode, je suis  intéressé.

Merci

A++

.oO° Microsoft, il y a mieux, mais c'est moins cher...
0
Rhend Messages postés 43 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 14 juin 2009
16 févr. 2009 à 15:57
Pour l'instant la seul alternative que j'ai trouver, mais ca ne corrige pas le problème a 100%, c'est d'arrondir d'abord à 3 chiffres après la virgule (ce qui fait qu'on passe d'un exposant x à juste 3 chiffres après la , ce qui est un peu plus pratique) et ré-arrondir à 2 chiffres après la , .

C'est ultra bancale mais en attendant d'avoir mieux... ^^ Regarde déjà si ca peut t'aider.
0
Rejoignez-nous