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 :

Math.round qui n'arrondit pas


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut Math.round qui n'arrondit pas
    Bonjour à tous.
    Je souhaite arrondir une valeur à deux décimales près.
    Celle valeur étant calculée à partir d'autres.

    Voici le code complet :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
      function calculerMontantTotal(idInput) {
        var isChecked = document.getElementById("echeancier_" + idInput).checked;
     
        var montantTotal = parseFloat(document.getElementById("totalAPayer").value);
        montantTotal = Math.round(montantTotal*100)/100;
     
        var montant = parseFloat(document.getElementById("montant_" + idInput).value);
        montant = Math.round(montant*100)/100;
     
        var cptEcheancier = parseInt(idInput) + 1;
        if(isChecked) {
          document.getElementById("totalAPayer").value = montantTotal + montant;
          toggleEcheancier(cptEcheancier, false, montantTotal);
        } else {
          var newMontantTotal = montantTotal - montant;
          newMontantTotal = Math.round(parseFloat(newMontantTotal)*100)/100;
     
          document.getElementById("totalAPayer").value = newMontantTotal;
          document.getElementById("totalAPayer").value = parseFloat(document.getElementById("totalAPayer").value);
          document.getElementById("totalAPayer").value = Math.round(document.getElementById("totalAPayer").value*100)/100;
     
          toggleEcheancier(cptEcheancier, true, newMontantTotal);
        }
      }
     
     
      function toggleEcheancier(idInput, isDisabled, montantTotal) {
        if(document.getElementById("echeancier_" + idInput) != null) {
          document.getElementById("echeancier_" + idInput).disabled = isDisabled;
     
          if(isDisabled && document.getElementById("echeancier_" + idInput).checked) {
            document.getElementById("echeancier_" + idInput).checked = false;
     
            var montantCourant = parseFloat(document.getElementById("montant_" + idInput).value);
            montantCourant = Math.round(montantCourant*100)/100;
     
            var newMontantTotal = montantTotal - montantCourant;
            newMontantTotal = Math.round(parseFloat(newMontantTotal)*100)/100;
     
            document.getElementById("totalAPayer").value = newMontantTotal;
            document.getElementById("totalAPayer").value = parseFloat(document.getElementById("totalAPayer").value);
            document.getElementById("totalAPayer").value = Math.round(document.getElementById("totalAPayer").value*100)/100;
     
            var cptEcheancier = parseInt(idInput) + 1;
            toggleEcheancier(cptEcheancier, isDisabled, newMontantTotal);
          }
        }
    Dans mon cas il y a 3 valeur en tout à additionner, chacune valant 53,3. Tout se passe bien jusqu'à la dernière ou je passe de 106,6 à 1959.8999999999

    D'ou cela peut-il venir?
    J'espère être assez clair!

    Merci d'avance

  2. #2
    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
    Par défaut
    A quoi ça sert d'attribuer 3 fois une value ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.getElementById("totalAPayer").value = newMontantTotal;
          document.getElementById("totalAPayer").value = parseFloat(document.getElementById("totalAPayer").value);
          document.getElementById("totalAPayer").value = Math.round(document.getElementById("totalAPayer").value*100)/100;
    ???
    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 !

  3. #3
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    oui je sais que c'est bien con la!
    mais je cherchais un peu d'ou venais le problème, donc l'écriture passait après...

  4. #4
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    J'ai essayé d'utiliser toFixed aussi mais sans résultat

  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 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
    Par défaut
    tu n'aurais pas un souci de séparateur decimal
    chez moi ça marche très bien
    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
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    Quand je regarde dans Firebug il additionne bien 53,3 et 106,6 mais la valeur affichée est 159.8999999 au lieu de 159.9

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

Discussions similaires

  1. [Maths] Un génie qui ne communique pas :)
    Par KiLVaiDeN dans le forum La taverne du Club : Humour et divers
    Réponses: 20
    Dernier message: 25/08/2006, 21h24
  2. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 13h09
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. [VB6] générer un recordset qui n'est pas lier à un bdd
    Par damyrid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/06/2003, 17h48
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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