|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2004 Messages : 53 ![]() |
Bonjour à tous,
j'aimerais comprendre pourquoi le code donne comme résultat 501 au lieux de 502 ?? Merci |
|
|
00
|
|
|
#2 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2011 Messages : 56 ![]() |
bonjour,
c'est le parseInt qui cause souci. Pour 5.10*100 avec cette fonction ça fait 509. donne 509.9999999999994 |
|
|
01
|
|
|
#3 |
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 18 565 ![]() |
![]() 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 ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
|
|
20
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 171 ![]() |
Citation:
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 Code :
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. quitte à passer par un String il suffisait de retirer le . Code :
alert((5.02).toString().replace('.', '')); A+JYT |
|
|
|
11
|
|
|
#5 |
|
Membre chevronné
![]() Krusty Inscription : mai 2009 Messages : 525 ![]() |
ou pourquoi pas
Code :
alert(Math.round(parseFloat(5.02*100)));
__________________
programmer n'est pas connaitre tous les moindres détails d'un langage mais savoir exploiter sous toutes ses facettes ce que l'on connait. |
|
|
01
|
|
|
#6 | ||
|
Membre Expert
![]() ![]() Eric GaridacciInscription : septembre 2005 Messages : 1 094 ![]() |
Salut,
Il y a une fonction intéressante ici JavaScript Rounding Errors.Code js :
|
||
|
|
00
|
|
|
#7 | |||
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 171 ![]() |
Citation:
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 :
ç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 |
|||
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2004 Messages : 53 ![]() |
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 |
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 32 980 ![]() |
__________________
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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr Humour |
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : juillet 2004 Messages : 53 ![]() |
Impec, merci !
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com