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
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 ici JavaScript 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)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager