Pb javascript multiplication

Signaler
Messages postés
4
Date d'inscription
lundi 3 novembre 2003
Statut
Membre
Dernière intervention
4 mai 2004
-
Messages postés
11
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
11 avril 2005
-
Bonjour à tous,

J'ai développé une fonction javascript dans laquelle j'effectue une multiplication (rien de sorcier donc). Seulement, je suis très étonnée du résultat.

var qte=9;
var unitaire=264.78;
var montant=(unitaire*qte);

Au lieu de récupérer montant=2 383.02, je me retrouve avec montant = 2 383.019999999995. Je n'y comprends rien.

Quelqu'un a-t-il une idée?

Merci


Julie

3 réponses

Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
1
C'est la précision du javascript.
Tu peut faire un petit programme pour obtenir 100 décimales exactes :
http://www.sciences-en-ligne.com/momo/chronomath/java_elem/e300_deci.html
Messages postés
4
Date d'inscription
lundi 3 novembre 2003
Statut
Membre
Dernière intervention
4 mai 2004

Finalement, j'ai trouvé un article à ce sujet :

http://www.merlyn.demon.co.uk/pas-real.htm#Float

Pour éviter de me prendre la tête pendant 3 heures, j'ai arrondi à 2 décimales :

montant=Math.round(unitaire*qte*100)/100;

Merci

Julie
Messages postés
11
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
11 avril 2005

salut je debute en javascript (et je comprend pas trop l anglais)
j ai le meme probleme que j'ai résolue aussi en limitant le nombre de decimal

mais je trouve fous quand meme qu'il n'y pas moyen d'avoir un résultatr juste pour une multiplication aussi simple que 0.1*0.1 (je trouve 0.010000000000000002)

voici mon sript :
var tmp1=vente.q3.value;
var tmp2=vente.q4.value;
var tmp =parseFloat(tmp1)*parseFloat(tmp2);
document.getElementById("reste").innerHTML =tmp;

je me dit quand meme qu'il y a une solution et qu'elle doit etre banale, je doit pas etre le seul a avoir envie d'un calcul simple et exact avec des flotant .

donc si vous comprenez l anglai ou si vous conaissez la solution , merci de me l'expliquer.

(peut etre qui faut pas utiliser * mais autre chose ou ya une fonction qui fait lez calcul exact....)
merci ++