OVH Cloud OVH Cloud

traiter les pouièmes

7 réponses
Avatar
Raphaël THERY
Bonjour,

je n'arrive pas à arrondire mes numériques lorsqu'ils possèdent des
"pouièmes".
J'utilise bien la fonction décrite dans les posts précédents sur les
arrondis ... qui fonctionne très bien à une exception prés.

Sur une calculatrice, 29.9 * 0.95 = 28.405. En javascript cela me donne 29.9
* 0.95 = 28.404999999999997
du coup lorsque je veux arrondir à deux chiffres après la virgule j'obtiens
28.40 au lieu de 28.41.

Quelqu'un a une idée ?

Raphaël

7 réponses

Avatar
YD
je n'arrive pas à arrondire mes numériques lorsqu'ils possèdent des
"pouièmes".
J'utilise bien la fonction décrite dans les posts précédents sur les
arrondis ... qui fonctionne très bien à une exception prés.

Sur une calculatrice, 29.9 * 0.95 = 28.405. En javascript cela me donne 29.9
* 0.95 = 28.404999999999997
du coup lorsque je veux arrondir à deux chiffres après la virgule j'obtiens
28.40 au lieu de 28.41.

Quelqu'un a une idée ?


Si tu calcules des remises, travaille en centimes et convertis en euros après,
bref si tes quantités ne sont ni trop grandes ni trop petites, travaille avec
des entiers le plus possible... Il n'y a pas àmha de contournement simple avec
les flottants, cela tient à la représentation interne de ces nombres.

--
Y.D.

Avatar
Raphaël THERY
Quand tu dis il n'y a pas de contournement simple, cela signifie qu'ils en
existent ;-)
Car dans mon cas je ne peux absolument pas faire autrement...

Bon sinon en dernier recours j'utiliserai cette solution.
Merci


"YD" a écrit dans le message de
news:41bf2646$0$11901$
je n'arrive pas à arrondire mes numériques lorsqu'ils possèdent des
"pouièmes".
J'utilise bien la fonction décrite dans les posts précédents sur les
arrondis ... qui fonctionne très bien à une exception prés.

Sur une calculatrice, 29.9 * 0.95 = 28.405. En javascript cela me donne
29.9


* 0.95 = 28.404999999999997
du coup lorsque je veux arrondir à deux chiffres après la virgule
j'obtiens


28.40 au lieu de 28.41.

Quelqu'un a une idée ?


Si tu calcules des remises, travaille en centimes et convertis en euros
après,

bref si tes quantités ne sont ni trop grandes ni trop petites, travaille
avec

des entiers le plus possible... Il n'y a pas àmha de contournement simple
avec

les flottants, cela tient à la représentation interne de ces nombres.

--
Y.D.




Avatar
ecm06
Sur une calculatrice, 29.9 * 0.95 = 28.405. En javascript cela me donne
29.9

* 0.95 = 28.404999999999997
du coup lorsque je veux arrondir à deux chiffres après la virgule
j'obtiens

28.40 au lieu de 28.41.

Quelqu'un a une idée ?


Arrondir d'abord à 3 chiffres puis à 2 ?

a).9*0.95;
a=Math.round(a*1000)/1000;
a=Math.round(a*100)/100;
document.write(a);

@++,
Thierry

Avatar
ASM


Bon sinon en dernier recours j'utiliserai cette solution.

Merci


Je ne sais si sur le(s) site(s) du gouvernement il y a toujours
le convertisseur euro/francs
mais ils avaient résolu le pb
(de manière assez alambiquée)

--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************


Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonjour !

cela tient à la représentation interne de ces nombres




Je dirais : "cela tient AU CHOIX de la représentation...". En effet, si l'on
avait, en javascript, la possibilité d'utiliser le DCB (Décimal Codé Binaire
; BCD in english), qui est codé dans les processeurs, on n'aurait plus ce
problème d'arrondis. Mais on ne pourrait pas gérer les notations
exponentielles.

--
Michel Claveau



Avatar
noone
Quand tu dis il n'y a pas de contournement simple, cela signifie qu'ils en
existent ;-)
Car dans mon cas je ne peux absolument pas faire autrement...

Bon sinon en dernier recours j'utiliserai cette solution.
Merci



Bonjour,

Oui lib de calcul formel, ou lib de calcul en précision arbitraire
PARI http://pari.math.u-bordeaux.fr/
GIAC http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
GMP http://www.swox.com/gmp/
NTL http://www.shoup.net/ntl/
...

mais il faut interfacer ça avec JavaScipt... (???)

donc je ne peux pas t'aider (je développe à titre perso en C++)

en clair multiplie par 100.... fait tout calcul divise par 100 ensuite
;-) ça sera plus simple... sauf si tu n'as pas le choix

Cordialement

Avatar
Raphaël THERY
Cela ne marche pas à tout les coups (je suis aussi tombé dans cette erreur).
si ma valeur est 20.404612
arrondi directement à 2 cela me donne 20.40 ce qui est la bonne valeur.
si j'arrondi à 3 puis à 2 j'obtiens sucessivement 20.405 puis 20.41.


Je vais faire ce qui est préconisé dans les autres posts, d'abord multiplier
par 100.
Merci à tous.

"ecm06" a écrit dans le message de
news:41c00e5c$0$12709$
Sur une calculatrice, 29.9 * 0.95 = 28.405. En javascript cela me donne
29.9

* 0.95 = 28.404999999999997
du coup lorsque je veux arrondir à deux chiffres après la virgule
j'obtiens

28.40 au lieu de 28.41.

Quelqu'un a une idée ?


Arrondir d'abord à 3 chiffres puis à 2 ?

a).9*0.95;
a=Math.round(a*1000)/1000;
a=Math.round(a*100)/100;
document.write(a);

@++,
Thierry