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 :

Plusieurs calculs en fonction d'un montant


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 64
    Par défaut Plusieurs calculs en fonction d'un montant
    bonjour à tous ,

    j'ai un petit souçis, j'ai créé une fonction pour faire un calcul de frais d'agence en fonction du montant , lé problème que je rencontre , c'est que dans se calcul j'ai des addition et des mulitiplication , et je ne sais comment faire pour que cela fonctionne .

    j'ai essayé différente choses , mais il n'y a que le dernier calcul( multiplication ) qui fonctionne .

    voila le code que j'ai fais au départ

    merci pour votre aide sachant que je suis débutant

    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
    <script>
            function Calcul() {
            console.log("toto");
            Prix = document.getElementById('prix').value;
            if(Prix >= 1 && Prix <= 99999){
            Taux_com = ('6000');
            }
            if(Prix >= 100000 && Prix <= 200000){
            Taux_com = ('1.06');
            }
            if(Prix >= 200001 && Prix <= 400000){
            Taux_com = ('1.05');
            }
            if(Prix > 400001 ){
            Taux_com = ('1.04');
            }
            var Prixtot = Prix*Taux_com;
            var Com = Prixtot-Prix;
            document.getElementById('prix_fai').value= Prixtot.toFixed();
            document.getElementById('commission').value= Com.toFixed();
     
            }
            </script>
    ce que j'ai essayé de modifier :

    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
    <script>
           function Calcul() {
           console.log("toto");
           Prix = document.getElementById('prix').value;
           if(Prix >= 1 && Prix <= 99999){
           Taux_com = ('6000');
           }
           if(Prix >= 100000 && Prix <= 200000){
           Taux_com = ('1.06');
           }
           if(Prix >= 200001 && Prix <= 400000){
           Taux_com = ('1.05');
           }
           if(Prix > 400001 ){
           Taux_com = ('1.04');
           }
           if(Prix < 350001 ){
           Taux_com = ('1.04');
           }
           if(Prix <= 99999){
           var Prixtot = Prix+Taux_com;
           }
           else
           {
           var Prixtot = Prix*Taux_com;
           }
           var Prixtot = Prix*Taux_com;
           var Com = Prixtot-Prix;
           document.getElementById('prix_fai').value= Prixtot.toFixed();
           document.getElementById('commission').value= Com.toFixed();
     
           }
           </script>

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Bonjour,

    Tu veux dire que tu as un message d'erreur? Ou que le résultat des opérations est faux?

    En testant, je constate que ça "fonctionne", même si ta fonction est trop bavarde;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 64
    Par défaut
    bonjour,

    non pas d'erreur , sur le premier code , lé problème c'est que le premier calcul est une addition et pas une multiplication .

    donc si le montant est inférieur à 100000 il multiplie le montant par 6000 au lieu de l'additionner ;

    et dans le deuxième il ne prend en compte que le dernier calcul ....

    j'ai peut être ommis quelques choses ....

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Oui mais si tu veux additionner, utilise et non ;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 64
    Par défaut
    oui ,

    mais comment je fais pour utiliser + ou * en fonction du montant , car les essais que j'ai fais ne fonctions pas ... as tu un exemple à me montrer

    merci

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Sous réserve d'avoir bien compris le problème :

    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
        function Calcul() {
            let Prix = document.getElementById('prix').value;
            let Taux_com = 0;
            let Prixtot = 0;
            let Com = 0;
     
            if (Prix >= 1 && Prix <= 99999) {
                Taux_com = ('6000');
            }
            if (Prix >= 100000 && Prix <= 200000) {
                Taux_com = ('1.06');
            }
            if (Prix >= 200001 && Prix <= 400000) {
                Taux_com = ('1.05');
            }
            if (Prix > 400001) {
                Taux_com = ('1.04');
            }
            if (Prix < 350001) {
                Taux_com = ('1.04');
            }
     
            if (Prix < 100000) {
                Prixtot = Prix + Taux_com;
            } else {
                Prixtot = Prix * Taux_com;
            }
     
            Com = Prixtot - Prix;
     
            document.getElementById('prix_fai').value = Prixtot.toFixed();
            document.getElementById('commission').value = Com.toFixed();
        }

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 64
    Par défaut
    bonjour danielhagnoul,

    merci pour ta réponse , je ne connaissais pas ' let ' .....

    je test cela et reviens vers toi ...

    bon malheureusement cale ne fonctionne pas pour les montant en dessous de 100000 .....il ne prend pas en compte l'addition ... je ne comprends pas pourquoi ....

    au dessus pas de soucis ....

  8. #8
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Salut @anti91,
    dans ta version modifée il y a une instruction vers la fin, var Prixtot = Prix * Taux_com qui écrase la valeur précédente de Prixtot. La version de @danielhagnoul corrige ce problème, normalement.

    Après, Daniel n’a pas remis en question ton test avec la valeur 350 001 qui écrase les taux calculés avant.

    Je propose de réécrire ce code avec des if / else enchaînés qui auront deux avantages :
    • on perçoit un peu mieux le « flot logique » du calcul ;
    • on écrit moins de chiffres en dur, et donc on a moins de chances de faire des fautes de frappe.

    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
    function Calcul() {
      "use strict"; // voir https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Strict_mode
     
      console.log("Africa");
      let Prix = document.getElementById('prix').value;
      let Taux_com;
      if (Prix < 1) {
        throw Error("Calcul non défini pour prix < 1");
      }
      else if (Prix < 100000) {
        Taux_com = 6000;
      }
      else if (Prix < 200000) {
        Taux_com = 1.06;
      }
      // que faire autour de 350000 ?
      //
      // ...
      //
      else if (Prix < 400000) {
        Taux_com = 1.05;
      }
      else { // Prix >= 400000
        Taux_com = 1.04;
      }
     
      let Prixtot;
      if (Prix < 100000) {
        Prixtot = Prix + Taux_com;
      }
      else {
        Prixtot = Prix * Taux_com;
      }
     
      let Com = Prixtot - Prix;
      document.getElementById('prix_fai').value = Prixtot.toFixed();
      document.getElementById('commission').value = Com.toFixed();
    }
    Tu noteras également que j’ai passé toutes les valeurs numériques en nombres. En JavaScript, il faut se méfier des conversions de type implicites comme de la peste. D’ailleurs, je te suggère une petite amélioration sur la façon de récupérer la valeur Prix.
    Pour la clarté, je vais mettre une référence sur l’input dans une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const inputPrix = document.getElementById('prix');
    • si l’input #prix est de type="number", tu peux utiliser inputPrix.valueAsNumber ;
    • sinon, convertis explicitement avec parseInt(inputPrix.value, 10).


    Si, comme moi, tu n’aimes pas compter les zéros, tu peux utiliser la notation scientifique 1e5, 2e5, 3.5e5, etc. à la place de 100 000, 200 000, 350 000, respectivement.

    À l’affichage, pour le confort de l’utilisateur ou de l’utilisatrice, tu peux utiliser un formateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const formatter = Intl.NumberFormat();
    console.log(formatter.format(350000)); // "350 000"
    Un exemple un peu plus complexe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const formatter = Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR' });
    console.log(formatter.format(350000)); // "350 000,00 €"
    Pour finir, tu n’es pas à l’abri de petits problèmes de précision, mais on va garder ça pour plus tard
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    c'est totalement anti-logique d'associer la valeur "6000" à la variable Taux_com....
    C'est comme mélanger les carottes et les serviettes !

    Il faut utiliser UNE AUTRE variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      let Taux_com = 1;	// valeur par défaut
      let Prix_plus = 0;	// valeur par défaut
     
      if (Prix < 1) {
        throw Error("Calcul non défini pour prix < 1");
      }
      else if (Prix < 100000) {
        Prix_plus = 6000;
      }
      else if (Prix < 200000) {
        Taux_com = 1.06;
      }
    .......
      let Prixtot = (Prix + Prix_plus) * Taux_com; // calcul valable dans TOUS les cas

Discussions similaires

  1. [XL-2013] Calcul en fonction de plusieurs paramètres
    Par Julien68708 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/07/2018, 11h45
  2. [XL-2010] Calcul impliquant plusieurs conditions en fonction de 3 Boutons d'option et 2 TextBox
    Par Jane92 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/12/2015, 10h33
  3. Plusieurs CALCULS somme dans un ETAT
    Par dynxd dans le forum IHM
    Réponses: 2
    Dernier message: 28/09/2005, 16h45
  4. Réponses: 4
    Dernier message: 28/09/2005, 09h19
  5. plusieurs resultats de fonctions
    Par sos dans le forum C
    Réponses: 4
    Dernier message: 29/02/2004, 17h18

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