Bonjour � tous,
j'aimerais comprendre pourquoi le codedonne comme r�sultat 501 au lieux de 502 ??
Code : S�lectionner tout - Visualiser dans une fen�tre � part alert(parseInt(5.02*100));
Merci
Bonjour � tous,
j'aimerais comprendre pourquoi le codedonne comme r�sultat 501 au lieux de 502 ??
Code : S�lectionner tout - Visualiser dans une fen�tre � part alert(parseInt(5.02*100));
Merci
bonjour,
c'est le parseInt qui cause souci.
Pour 5.10*100 avec cette fonction �a fait 509.
donne 509.9999999999994
Code : S�lectionner tout - Visualiser dans une fen�tre � part parseFloat(5.10*100);![]()
parseInt() et parseFloat() n'y sont pour rien, c'est la repr�sentation des num�riques dans la plupart des langages qui sont en cause !
The Floating-Point Guide - What Every Programmer Should Know About Floating-Point Arithmetic
Pas de question technique par MP !
Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
Mes formations video2brain : La formation compl�te sur JavaScript � JavaScript et le DOM par la pratique � PHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum
Je trouve la m�thode quelque peut capilotract�e.
5.02*100 donne un float
parseInt prends en param�tre une String.
l'interpr�te va donc faire une toString sur le float avant le le passer � parseInt
celui-ci va tenter de convertire la String en entier
on a donc un code pour loin moins �trange.
�a revient � �a
alors qu'il semble que tu cherche � convertir un float en int
Code : S�lectionner tout - Visualiser dans une fen�tre � part alert(parseInt((5.02*100).toString()));
fait des calcul avec les nombre me parais bien plus naturel que d'abuser des Cast et parse en tout genre.
et tout de m�me une m�thode bien plus simple.
Code : S�lectionner tout - Visualiser dans une fen�tre � part alert(Math.round(5.02*100));
quitte � passer par un String il suffisait de retirer le .
Mais on a alors une String et non un Int
Code : S�lectionner tout - Visualiser dans une fen�tre � part alert((5.02).toString().replace('.', ''));
A+JYT
ou pourquoi pas
Code : S�lectionner tout - Visualiser dans une fen�tre � part alert(Math.round(parseFloat(5.02*100)));![]()
Salut,
Il y a une fonction int�ressante iciJavaScript Rounding Errors.
Code js : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 function Round(Number, DecimalPlaces) { return Math.round(parseFloat(Number) * Math.pow(10, DecimalPlaces)) / Math.pow(10, DecimalPlaces); } var n=5.02*100; // 501.99999999999994 alert( Round(n,2) ); // 502
Mais c'est une manie les fonctions de parsing sont destin�es � "lire" dans une chaine de caract�res
Le produit 5.01 * 100 est une objet de type float.
pourquoi vouloir le transformer en chaine de caract�re pour le passer � un e fonction qui en refera un float ?
ECMAScript est un langage typ�. ce n'est pas parce-qu'il offre des facilit� de convertion de type qu'il faut en faire n'importe quoi.
en java par exemple il ne vous viendrait pas � l'id�e de faire
Code java : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 Float number =5.02; number = number * 100; String stringNumber = number.toString(); Float result = Float. parseFloat(stringNumber);
�a ne sert � rien et �a risque d'alt�rer le nombre.
Donc encore une fois javascript est un langage typ� chaque objet � un type � un instant T et il est tpujours plus couteux d'en changer que de l'utiliser.
Attention changer le type d'un objet Javascript n'est pas un CAST � la C ou C++
lorsqu'un objet est du type A en C A obj = new A (); et qu'on fait (B)obj; l'objet obj pointe sur une zone m�moire qui contient les donn�es de l'objet l'op�ration de CAST indique au compilateur qu'il doit dans la suite utiliser les propi�t� de la classe B pour acceder � cet objet. l'objet lui-m�me n'est pas modifi�.
en javascript � chaque fois que l'interpr�te d�tecte la n�c�cit� d'un changement de type il modifie en m�moire l'objet pour qu'il corresponde au r�sultat attendu.
il convient donc de ne pas en abuser.
A+JYT
Oula ! Moi je veux juste que mon nombre d�cimal 5.02 soit �gal 502 lorsqu'on le multiplie par 100 et non � 501.9999....4 !
Merci
Code : S�lectionner tout - Visualiser dans une fen�tre � part Math.round(5.02*100,0)
Ma page Developpez - Mon Blog Developpez
Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
Votre post est r�solu ? Alors n'oubliez pas le Tag![]()
Venez sur le Chat de D�veloppez !
Partager