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 :

Conversion nombre entier incorrecte avec parseInt


Sujet :

JavaScript

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    100
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 100
    Par d�faut Conversion nombre entier incorrecte avec parseInt
    Bonjour � tous,

    j'aimerais comprendre pourquoi le code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    alert(parseInt(5.02*100));
    donne comme r�sultat 501 au lieux de 502 ??

    Merci

  2. #2
    Membre confirm�
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 63
    Par d�faut
    bonjour,

    c'est le parseInt qui cause souci.
    Pour 5.10*100 avec cette fonction �a fait 509.

    donne 509.9999999999994

  3. #3
    R�dacteur

    Avatar de Bovino
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut


    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 !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  4. #4
    Expert confirm�
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Urbaniste
    Secteur : Sant�

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par d�faut
    Citation Envoy� par zouetchou Voir le message
    Bonjour � tous,

    j'aimerais comprendre pourquoi le code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    alert(parseInt(5.02*100));
    donne comme r�sultat 501 au lieux de 502 ??

    Merci
    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
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    alert(parseInt((5.02*100).toString()));
    alors qu'il semble que tu cherche � convertir un float en int

    fait des calcul avec les nombre me parais bien plus naturel que d'abuser des Cast et parse en tout genre.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    alert(Math.round(5.02*100));
    et tout de m�me une m�thode bien plus simple.

    quitte � passer par un String il suffisait de retirer le .
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    alert((5.02).toString().replace('.', ''));
    Mais on a alors une String et non un Int

    A+JYT

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    ou pourquoi pas

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    alert(Math.round(parseFloat(5.02*100)));

  6. #6
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activit� : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par d�faut
    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

  7. #7
    Expert confirm�
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Urbaniste
    Secteur : Sant�

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par d�faut
    Citation Envoy� par mekal Voir le message
    ou pourquoi pas

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    alert(Math.round(parseFloat(5.02*100)));
    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

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    100
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 100
    Par d�faut
    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

  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 659
    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 659
    Billets dans le blog
    1
    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 !

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    100
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 100
    Par d�faut
    Impec, merci !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. conversion nombre en texte avec Format
    Par LaPanic dans le forum VBScript
    R�ponses: 2
    Dernier message: 28/04/2010, 01h16
  2. Conversion de nombre d�cimaux en nombre entier
    Par noahline dans le forum VBScript
    R�ponses: 2
    Dernier message: 05/12/2008, 12h47
  3. R�ponses: 2
    Dernier message: 10/09/2007, 19h43
  4. [VB5]Conversion d'octets en nombres entiers
    Par KardiakKris dans le forum VB 6 et ant�rieur
    R�ponses: 4
    Dernier message: 23/03/2006, 17h15
  5. Conversion incorrecte avec atof ou strtod
    Par sber74 dans le forum C
    R�ponses: 16
    Dernier message: 15/03/2006, 20h32

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