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 :

Tout petit bug étrange avec parseInt


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Points : 19
    Points
    19
    Par défaut Tout petit bug étrange avec parseInt
    Voici le source d'un petit fichier HTML de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <html>
    <head>
      <script type="text/javascript">
      function dateTesting()
      {
        var myDate = "2008-09-15";
        alert("Month: " + myDate.substr(5, 2));
        alert(myDate.substr(5, 2) + " * 100 = " + parseInt(myDate.substr(5, 2)) * 100);
      }
      </script>
    </head>
    <body onLoad="dateTesting();">
      Hello World!
    </body>
    </html>
    C'est tout bête : j'ai une chaîne qui contient 2008-09-15 et je cherche à capturer le mois, en faire un int pour ensuite faire un petit calcul avec. Par exemple, le multiplier par 100. Et bien le résultat est inquiétant : la première alerte m'affiche bien "09" mais la deuxième me retourne 0 ! Autrement dit, 09 x 100 = 0. Hmmmm...

    Vous y comprenez quelque chose, vous ? Il y aurait un bug dans la fonction parseInt ? Elle n'a pas l'air d'aimer les chaînes de nombre qui commencent par un zéro.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Bon ben je vais me répondre à moi-même : oui il y a bel et bien un bug connu dans la fonction ParseInt de JavaScript, elle n'est pas capable de convertir "08" et "09". Bon nombre d'autres personnes ont eu le même bug que moi.

  3. #3
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 646
    Points : 11 135
    Points
    11 135
    Par défaut
    En javascript un nombre commençant par 0 est un nombre en base 8 (base octal). Malheureusement "08" et "09" ne sont pas des nombres octal valides donc parseInt() retourne 0

    par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var huit = parseFloat("08");
    var neuf = parseFloat("09");
    retourneront 8 et 9

    Est-ce vraiment un bug ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Aaaaaah, je vois... Bah, j'ai adapté mon code pour virer tous les zéros inutiles du début des nombres avant de les envoyer à parseInt. Ça fonctionne bien, je crois que je vais garder cette soluce.

    Merci quand même pour votre réponse !

  5. #5
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    parseInt(XX,10)

  6. #6
    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 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    +1000 Matt j'allais le dire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var Machin="08"
    alert(parseInt(Machin))
    alert(parseInt(Machin,10))
    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 !

  7. #7
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 646
    Points : 11 135
    Points
    11 135
    Par défaut
    Excellent

    J'ignorais que l'on pouvait préciser la base du nombre qui est passé en argument. On peut même réaliser des conversions (base n) -> (base 10)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Trop fort les gars ! Je ne savais pas moi non plus qu'on pouvait préciser la base ! C'est pas très documenté.

  9. #9
    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 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    ça dépend où ...
    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 !

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

Discussions similaires

  1. Bug IE6 avec label : petites div redimensionnées
    Par pacpacapero dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 15/12/2007, 12h46
  2. Un tout petit problème avec mon menu contextuel
    Par jbrasselet dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/10/2007, 16h40
  3. Ecrire avec une taille de police toute petite
    Par yobuntu dans le forum Mise en forme
    Réponses: 2
    Dernier message: 13/02/2007, 15h04
  4. Réponses: 4
    Dernier message: 15/10/2006, 19h05
  5. Tout petit probleme avec les string
    Par bixi dans le forum Delphi
    Réponses: 4
    Dernier message: 06/06/2006, 10h46

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