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 :

Chiffres à virgule


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2002
    Messages : 57
    Par défaut Chiffres à virgule
    Bonjour,

    J'effectue une opération de calcul sur un champ, et je me demande pourquoi, lorsqu'il calcule 3x2.7 le résultat est de 8.10000 et pour 2x2.7 = 5.4 (sans la marée de 0 qui suit). C'est un grand mystère !

    A la base, j'essaie d'obtenir des chiffres toujours à virgule, même s'il n'y a rien après, mais seulement avec deux nombres, p.ex. 5.40 ou 8.10 ou encore 9.00.

    J'ai essayé avec math.round, mais ce n'est pas vraiment son utilité il me semble :p

    Quelqu'un aurait-il une suggestion, s'il vous plaît ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="text" name="objet_nbre" onkeyup="objet.value=(2.7*this.value); calcule();" />
    <input type="text" id="objet" name="objet" value="0" readonly="readonly" />
    Merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    http://javascript.developpez.com/faq...ript#NBDecimal
    toFixed

    tous les nombres sont des flottant et les calculs sont peu précis...(transformation en binaire ect...)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2002
    Messages : 57
    Par défaut
    J'ai essayé avec cette méthode, ça marche très bien pour limiter à deux chiffres après la virgule, seulement ça m'arrondit aussi le total... Par exemple si le total devait être 13.50, et bien il n'est que de 13.00. Une raison à cela ?

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objet.value=(2.7*this.value).toFixexd(2);
    !!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2002
    Messages : 57
    Par défaut
    Merci, je le mettais pas au bon endroit du tout !

    Par contre, j'ai toujours le problème de l'arrondissement qui supprime des valeurs, lorsque je calcule un total, et je ne comprends pas vraiment d'où il vient.

    Si je mets (p.ex.) 5x objet1 (prix total = 13.50) et 0x objet 2, le total sera de 13.00 pour une raison mystérieuse...

    Une idée ? Merci d'avance !

    Code mon javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    objet1_prix = document.getElementById('objet1').value;
    objet2_prix = document.getElementById('objet2').value;
     
    total = parseInt(objet1_prix,10)+ parseInt(objet2_prix,10);
    document.getElementById('le_total').value = total;

    Code mon html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <input type="text" name="objet1_nbre" onkeyup="objet1.value=(2.7*this.value).toFixexd(2); calcule();" />
    <input type="text" id="objet1" name="objet1" value="0" readonly="readonly" />
    <input type="text" name="objet2_nbre" onkeyup="objet2.value=(2.7*this.value).toFixexd(2); calcule();" />
    <input type="text" id="objet2" name="objet2" value="0" readonly="readonly" />
    <input type="text" id="le_total" name="le_total" value="0" readonly="readonly" />

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2002
    Messages : 57
    Par défaut
    Je découvre qu'apparemment c'est la fonction parseInt() qui pose un problème... Seulement, je ne trouve rien pour la contourner. Existe-t-il une fonction similaire permettant une addition simple, mais avec des chiffres à virgule ?

  7. #7
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Par défaut
    Citation Envoyé par Corinne
    J'ai essayé avec math.round, mais ce n'est pas vraiment son utilité il me semble :p
    J'ai aussi "détourné" l'utilité de math.round, pour une fonction calculant des pourcentages (du genre 85.21, 0.56, bref, toujours deux chiffres apres la virgule)

    L'astuce consiste a multiplier par 100, arrondir a l'entier pres, et rediviser par 100 ...

    Math.round( #VALEUR# * 100 ) / 100;

    ceci dit, Javascript semble pas tres performant en math ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/11/2008, 21h47
  2. Chiffre à virgule
    Par teddy-a3 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/07/2008, 10h27
  3. Chiffres à virgule : points et virgules ?
    Par poulette3000 dans le forum Langage
    Réponses: 11
    Dernier message: 23/07/2007, 12h23
  4. Rand avec chiffre à virgule
    Par Mikiman dans le forum Langage
    Réponses: 2
    Dernier message: 23/09/2006, 14h56
  5. Problème de format pour des chiffres à virgule
    Par bob75000 dans le forum Access
    Réponses: 5
    Dernier message: 21/07/2006, 10h42

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