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 :

troncage d'un montant avec floor et écart de centime.


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 365
    Par défaut troncage d'un montant avec floor et écart de centime.
    Bonjour à tous,

    J'utilise une fonction permettant de tronquer (Math.floor()) un nombre représentant le montant TTC . Seulement voilà pour le cas d'un nombre étant égal à 60, lorsque je muliplie ce dernier par 1.196 en utilisant la fonction Floor pour tronquer. J'obtiens 71,75 en effectuant le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    montantHT = 60;
    montantTTC = Math.floor(montantHT*1.196*100)/100;
    Response.write(montantTTC);
    au lieu de 71,76 que je devrais avoir. Y a t'il une fonction permettant de résoudre ce problème d'écart de centime ?

    Le code que j'utilise est sous environnement ASP Javascript .


    Cordialement.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    Bonsoir,
    pourquoi ne pas utiliser Math.round?
    <EDIT>
    ou toFixed(2)
    </EDIT>

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 365
    Par défaut
    Je ne voudrais pas utiliser d'arrondi, c'est pour des raisons de comptabilités et ne souhaite que tronquer les nombres .

    Par exemple pour 15.148855 je voudrais obtenir un nombre 15.14 mais pas 15.15 .

    Cordialement .

  4. #4
    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
    Le souci provient de la virgule flottante en javascript
    pour javascript
    60 * 1.196 = 71.75999999999


    il te faut donc corriger ceci pour js:
    Math.round(ht*1.196*100)/100)

    et en y ajoutant ton floor:
    Math.floor(Math.round(ht*1.196*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 !

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    Citation Envoyé par SpaceFrog
    Le souci provient de la virgule flottante en javascript
    pas seulement en javascript d'ailleurs

    Le rajout de Math.round ne répondra pas au problème, il existe une alternative, pour tronquer s'entends, et de diviser la division faisant "moins" d'erreur, mais comme elle en fait aussi il suffit de garder la plus grande des valeurs.

    Petit code d'exemple
    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
    var Mul = 1.196;
    var Div = 1 / Mul;
    var valMul;
    var valDiv;
    var valMax;
    var Html ='<table><tr><th>valeur<\/th><th>Multiplication<\/th><th>Division<\/th><th>Garde<\/th><\/tr>';
    for( var i = 1; i < 100; i +=1){
      valMul = i*Mul;
      valDiv = i/Div;
      valMax = valMul > valDiv ? valMul : valDiv;
      valMax = Math.floor( valMax *100)/100;
      // Methode calcul SpaceFrog
      //valMax = Math.floor(Math.round( valMul*100))/100;
      Html += '<tr><td>' +i +'<\/td><td>'+ valMul +'<\/td><td>' +valDiv +'<\/td><td>'+ valMax +'<\/td><\/tr>';
    }
    Html +='<\/table>';
    document.write( Html);

  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 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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Math.round ne répondra pas au problème,
    ben en l'occurrence avec un *100 /100 ça recitifie au centième
    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 !

Discussions similaires

  1. smartforms affichage de montants avec signe "-"
    Par kitty2006 dans le forum SAP
    Réponses: 6
    Dernier message: 11/12/2007, 13h55
  2. Problème avec RAID5 sur carte Asus M2N32-SLI Deluxe
    Par Dioxine dans le forum Composants
    Réponses: 8
    Dernier message: 17/08/2007, 08h30
  3. Réponses: 5
    Dernier message: 19/04/2007, 12h45
  4. Capture de fronts montants avec un PIC16F876
    Par sylvain42 dans le forum C
    Réponses: 3
    Dernier message: 12/06/2006, 14h48

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