[javascript] erreur de parseInt étrange

erreur de parseInt étrange [javascript] - HTML/CSS - Programmation

Marsh Posté le 04-01-2006 à 17:25:31    

Bonsoir,
 
un truc bizarre en js.
 
si je fais :
 

Code :
  1. test = '07'
  2. alert(parseInt(test))


 
J'ai un beau 7 qui s'affiche
 
mais si je mets '08' ou '09' ca ne fonctionne pas, les autres nombres passent eux.
 
Si quelqu'un a une idée.  :hello:


Message édité par $man le 04-01-2006 à 17:25:50
Reply

Marsh Posté le 04-01-2006 à 17:25:31   

Reply

Marsh Posté le 04-01-2006 à 17:34:44    

Code :
  1. alert(parseInt(test,10));

Reply

Marsh Posté le 04-01-2006 à 17:46:12    

0 devant c'est un nombre au format octal non ?
donc 8 et 9 n'existe pas dans cette base.

Reply

Marsh Posté le 04-01-2006 à 19:38:59    

hum,
merci de ces réponses,  on en apprend vraiment tous les jours :)
 
:hello:

Reply

Marsh Posté le 04-01-2006 à 23:06:19    

y'a pas qu'avec 0 devant que ça déconne.
 
j'ai déjà eu ce problème sur un grand site e-Commerce. le bug était resté en suspend pendant des semaines, parcequ'on ne comprenait pas ce qu'il se passait :D
et du coup quand les gens voulaient 9 unités d'un tuc, il se retrouvaient avec 11 :ouch:
 
depuis, je vous le radix à chaque fois que je croise une fonction qui l'accepte comme paramètre optionnel :D

Reply

Marsh Posté le 20-07-2006 à 19:10:15    

je viens d'avoir ce problème, et c'est vrai que ça surprend sur le coup... :heink:  
 
Surtout que dans la doc, il est bien spécifié que le 2ème paramètre optionnel (la base) vaut 10 par défaut, ce qui est un mensonge éhonté :o La fonction marche en base 8 par défaut...
 
Pour ceux qui galèreraient un jour avec ça :
 

Code :
  1. alert(parseInt("09",10)); //affiche l'entier 9

Ca marche bien
 
 :hello:

Reply

Marsh Posté le 20-07-2006 à 22:17:03    

Citation :

Les spécifications ECMAScript stipulent que si la chaîne débute par "0" (mais non "0x" ou "0X" car là parseInt() l'interprèterait comme un nombre hexadécimal), parseInt() peut la parser comme étant un nombre octal ou un nombre décimal.
Comme le comportement n'est pas spécifié, vous ne devriez jamais utiliser parseInt() pour parser des nombres avec des zéros d'entrée, à moins de spécifier clairement la base à utiliser !


 
source : JavaScript La référence (O'Reilly)
 
edit : euh.. tout ça pour dire que ce n'est pas forcément un mensonge éhonté  ;)


Message édité par pikti le 20-07-2006 à 22:35:42
Reply

Marsh Posté le 27-07-2006 à 10:28:24    

Merci pour l'astuce, j'ai remarqué ce pb ajd. Je serais passé quelques jours plus tot je serais toujours en train de galérer ;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed