IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

parseInt("08") = 0 ?


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Par défaut parseInt("08") = 0 ?
    Bonjour

    J'ai un soucis avec mon script en javascript. J'ai besoin de récupérer un nombre se trouvant dans le nom de mon image. Lorsque je récupère un nombre inférieur à 10, j'ai un 0 placé devant. Pour récupérer la valeur de mon entier, je fais donc un parseInt. Lorsque ma chaine récupéré est "08" ou "09", mon parseInt renvoie 0 au lieu de 8 ou 9 alors que pour tout les autres chiffres, cela renvoie bien la valeur voulue.

    Voila donc la partie de mon script qui réalise cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nomImg=document.getElementById(idImg).name; // Le nom de l'image hors extension a été placé dans le name
    elements=nomImg.split("-"); // chaque élément est séparé par un tiret dans mon nom d'image et le nombre recherché est le 2ème élément
    alert(elements[1]); // Petite vérification pour s'assurer que j'ai bien récupéré le nombre 
    if (parseInt(elements[1])<=10){ // Seul les nombres inférieur ou égale à 10 m'interessent
      alert (parseInt(elements[1])); // Petite vérification
      points=points+ parseInt(elements[1]);
    }
    Es ce que vous voyez d'où peut venir le problème ?

  2. #2
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Bonjour,

    Je pense que le parseInt n'est pas assez rigouroux et donne parfois des erreurs, notamment avec les 9.
    Essayez parseFloat ou bien parseInt(valeur, 10).

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    ce n'est pas une question de rigueur ...

    par defaut parseInt est en base 8, il faut donc preciser le paramètre base 10 comme le precise Vermine pour avoir le resultat escompté
    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 !

  4. #4
    Membre confirmé
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Par défaut
    Merci beaucoup, j'ai précisé la base et je n'ai plus de soucis.

    Merci beaucoup

    EDIT : parseInt("09") aurait dut me donner 1 et non 0 si ça avait été en base 8.

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    pour plus de précisions:

    si la base (en second paramètre) est omise la fonction parse le debut du string comme suit:

    si le string commence par "0x", la base est 16 (hexadecimale)
    si le string commence par "0", la base est 8 (octale).
    si le string commence par autre chose, la base est 10 (decimale)

    dasn ton cas tu n'est donc pas en effet en octal, mais en hexadecimal
    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 !

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Lilouse Voir le message
    EDIT : parseInt("09") aurait dut me donner 1 et non 0 si ça avait été en base 8.
    Bien sûr que non. 9 n'est pas un chiffre octal valide, le parseur ne va donc pas le considérer.
    Personnellement je trouve que ça devrait faire une erreur, mais apparemment il se contente de s'arrêter au premier caractère non valide, et de l'ignorer.
    Ce qui nous donne à parser... Une chaîne vide, et devrait aussi faire une erreur, mais apparemment il considère que ça fait zéro. Bof bof.

    En tout cas, il n'y aurait vraiment aucune logique à obtenir 1.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo