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 :

Méthode eval tronque les valeurs


Sujet :

JavaScript

  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut Méthode eval tronque les valeurs
    Bonjour,

    J'utilise la methode EVAL en javascript pour evaluer différents types d'expression, opération et parfois decimaux.

    Est ce que quelqu'un sait pourquoi le resultat est arrondi et tronqué quand le chiffre évalué est trop long.

    Par exemple :
    eval("120.123456789123456789") -> 120.12345678912345
    eval("120123456789123456789") -> 120123456789123450000

    y a t-il une methode pour eviter cela?

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Par défaut
    La méthode permet d'évaluer une expression composée de chaines de caractères.
    Es tu sûr que c'est de cette méthode dont tu as besoin ?

    Je ne sais pas quelle est sa précision, mais pour transformer une chaine de caractères en décimal, essaie plutôt parseFloat(str)

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    Citation Envoyé par arnauann Voir le message
    Bonjour,

    J'utilise la methode EVAL en javascript pour evaluer différents types d'expression, opération et parfois decimaux.

    Est ce que quelqu'un sait pourquoi le resultat est arrondi et tronqué quand le chiffre évalué est trop long.

    Par exemple :
    eval("120.123456789123456789") -> 120.12345678912345
    eval("120123456789123456789") -> 120123456789123450000

    y a t-il une methode pour eviter cela?

    Merci d'avance.
    -> Peux tu me donner la valeur exacte de 10/3

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Bonjour,

    Comme le dit Slopera, eval va évaluer, mais aussi exécuter une expression.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var a=1;
    var chaine="a = a + 10";
    eval(chaine);
    document.write("Valeur de a = "+a);
    //valeur de a : 11
    Je ne vois pas du tout l'intérêt de faire un eval(); sur une chaine de ce type.
    parseFloat, parseInt, si tu veux transformer la chaîne en décimal ou en entier.

    GoT

  5. #5
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut
    merci pour ta reponse, par contre j'ai l'impression de retrouver le même problème avec parseFloat

    exemple :

    parseFloat("120.123456789123456789+ 1") -> 120.12345678912345
    parseFloat("120.123456789123456789") -> 120.12345678912345

  6. #6
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut
    Je comprends que cela paraisse sans intérêt d'utiliser EVAL avec un decimal mais la methode est utilisée de manière générique avec en paramètre qui est parfois un decimal, parfois une expression.
    Effectivement on ne peut pas donner la valeur exacte de 10/3 mais si je pose cette question c'est parce que j'ai besoin d'avoir 16 decimales, je voudrai juste savoir si cela est possible.

    merci.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Bonjour,

    Dans ton premier cas tu ne peux faire le calcul
    parseFloat("120.123456789123456789+ 1")
    C'est une chaîne de caractère et non un traitement d'entier / décimal.
    Il en faut pas oublier que les types sont importants pour les calculs.

    Si par exemple tu fais parseFloat("125.2a"); il va te retourner 125.2.


    Fin de l'explication du parseFloat , à ce moment tu dois bien utiliser le eval vu que tu as des expressions, par ce qui est du nombre je crois qu'il est limité, afin de ne pas surcharger le côté client, mais je ne suis sur de rien. Il faudra peut être que tu créer ta propre fonction afin de retourner les 16 caractères dont tu as besoin pour ton traitement.

    GoT

  8. #8
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    Citation Envoyé par arnauann Voir le message
    j'ai besoin d'avoir 16 decimales, je voudrai juste savoir si cela est possible.
    teste! (réponse : le nombre de décimales dépend de la partie entière ; le nombre de chiffre est limité)

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/02/2012, 18h40
  2. Réponses: 12
    Dernier message: 22/06/2010, 11h09
  3. Réponses: 6
    Dernier message: 27/08/2009, 13h43
  4. Réponses: 2
    Dernier message: 23/11/2003, 18h44
  5. Réponses: 2
    Dernier message: 29/10/2003, 23h47

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