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 :

Test nombre inférieur à un autre


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 135
    Points : 69
    Points
    69
    Par défaut Test nombre inférieur à un autre
    Bonjour,

    je récupère des champs de mon formulaire, je souhaite comparer 2 valeurs, l'une extraite du formulaire, l'autre calculé.

    Si la valeur montant_commission_epargne est superieure au plafond, on doit afficher le plafond, sinon on affiche la valeur de montant_commission_epargne

    Cela ne marche pas, il m'affiche toujours le plafond.

    Comment puis-je m'assurer que les 2 variables sont du meme format pour les comparer ?

    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
    //met a jour le montant de la Commission Epargne 
    function maj_montant_commission_epargne()
    {
    		//recupere le montant du versement epargne
    		var montant_versement_epargne=parseFloat(document.getElementById('montant_versement_epargne').value);	
     
    		//pourcentage de la commission epargne
    		var pourcentage_versement_epargne=parseFloat(document.getElementById('pourcentage_versement_epargne').value);
     
    		//plafond de la commission epargne a ne pas depasser
    		var plafond_commission_epargne=parseFloat(document.getElementById('plafond_commission_epargne').value);		
     
     
    		//montant calcule
    		var montant_commission_epargne=parseFloat((montant_versement_epargne*pourcentage_versement_epargne)/100);
     
    		var plafond_commission_epargne=round(plafond_commission_epargne,2);
     
    		var montant_commission_epargne=round(parseFloat(montant_commission_epargne),2);
     
     
    		if(plafond_commission_epargne!=0)
    		{
     
    			if(montant_commission_epargne<plafond_commission_epargne)
    			{
     
    			//ecrit le montant de la commission 
    			document.getElementById('affichage_montant_commission_epargne').value=montant_commission_epargne;
    			document.getElementById('montant_commission_epargne').value=montant_commission_epargne;
     
    				} //si le montant de la commission epargne est inferieur au plafond epargne
    				else if(montant_commission_epargne>=plafond_commission_epargne)
    				{ //sinon la commission correspond au plafond
    				document.getElementById('affichage_montant_commission_epargne').value=plafond_commission_epargne;
    				document.getElementById('montant_commission_epargne').value=plafond_commission_epargne;
    				} 
     
    		}
     
    		var montant_versement_epargne=round(montant_versement_epargne,2);
    		document.getElementById('montant_versement_epargne').value=montant_versement_epargne;
    }

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Points : 125
    Points
    125
    Par défaut
    Tu es débutante en javascript, je vois.

    - les noms de variables doivent être explicites, mais ce n'est pas la peine de les faire exagérément longues.
    Je propose : versement, pourcentage, plafond, commission

    - On met le mot-clef var lorsqu'on déclare une variable. Par la suite, ce n'est pas la peine de le réutiliser (c'est même une erreur)

    - Inutile de parser toutes les deux lignes !!!
    À la limite, utilises-le une seule fois lorsque tu prends des valeurs depuis un champ.
    Par la suite, javascript les gardera dans le type indiqué.
    Lors des calculs, le résultat prend automatiquement le type des opérandes.

    Lorsqu'un test est inutile, on évite de le mettre.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        if(nombre<10)
            // action A
        else if(nombre>=10)
            // action B
    S'il n'est pas plus petit que 10, il est forcément plus grand ou égal.
    Il serait donc mieux écrit ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        if(nombre<10)
            // action A
        else
            // action B
    Ton code "nettoyé" (rien que ça pourrait le faire fonctionner. À tester) :
    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
    //met a jour le montant de la Commission Epargne 
    function maj_montant_commission_epargne()
    {
    		//recupere le montant du versement epargne
    		var versement=parseFloat(document.getElementById('montant_versement_epargne').value);	
     
    		//pourcentage de la commission epargne
    		var pourcentage=parseFloat(document.getElementById('pourcentage_versement_epargne').value);
     
    		//plafond de la commission epargne a ne pas depasser
    		var plafond=parseFloat(document.getElementById('plafond_commission_epargne').value);
    		plafond=round(plafond,2);
     
     
    		//montant calcule
    		var commission=(versement*pourcentage)/100;
    		commission=round(commission,2);
    		versement=round(versement,2);
     
     
    		if(plafond!=0)
    		{
    			//si le montant de la commission epargne est inferieur au plafond epargne
    			if(commission<plafond)
    			{
    				//ecrit le montant de la commission 
    				document.getElementById('affichage_montant_commission_epargne').value=commission;
    				document.getElementById('montant_commission_epargne').value=commission;
    			}
    			//sinon la commission correspond au plafond
    			else
    			{ 
    				document.getElementById('affichage_montant_commission_epargne').value=plafond;
    				document.getElementById('montant_commission_epargne').value=plafond;
    			} 
     
    		}
    		document.getElementById('montant_versement_epargne').value=versement;
    }

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir,
    Citation Envoyé par Michaeljackfan Voir le message
    - On met le mot-clef var lorsqu'on déclare une variable. Par la suite, ce n'est pas la peine de le réutiliser (c'est même une erreur)
    Ce n'est pas obligatoire en javascript mais on doit l'utiliser pour utiliser une variable locale ayant le même non qu'une variable globale.

    A+.

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 141
    Points
    11 141
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonsoir,

    Ce n'est pas obligatoire en javascript mais on doit l'utiliser pour utiliser une variable locale ayant le même non qu'une variable globale.

    A+.
    Que ta variable soit locale ou globale, il faut le mettre :
    http://javascript.developpez.com/faq...arer-variables

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 135
    Points : 69
    Points
    69
    Par défaut
    J'ai suivi vos conseils, j'ai donc repris l'ensemble de la fonction

    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
    //met a jour le montant de la Commission Epargne 
    function maj_montant_commission_epargne()
    {
    		//recupere le montant du versement epargne
    		var versement=parseFloat(document.getElementById('montant_versement_epargne').value);	
     
    		//pourcentage de la commission epargne
    		var pourcentage=parseFloat(document.getElementById('pourcentage_versement_epargne').value);
     
    		//plafond de la commission epargne a ne pas depasser
    		var plafond=parseFloat(document.getElementById('plafond_commission_epargne').value);
    		plafond=round(plafond,2);
     
     
    		//montant calcule
    		var commission=(versement*pourcentage)/100;
    		commission=round(commission,2);
    		versement=round(versement,2);
     
     
    		if(plafond!=0)
    		{
    			//si le montant de la commission epargne est inferieur au plafond epargne
    			if(commission<plafond)
    			{
    				//ecrit le montant de la commission 
    				document.getElementById('affichage_montant_commission_epargne').value=commission;
    				document.getElementById('montant_commission_epargne').value=commission;
    			}
    			//sinon la commission correspond au plafond
    			else
    			{ 
    				document.getElementById('affichage_montant_commission_epargne').value=plafond;
    				document.getElementById('montant_commission_epargne').value=plafond;
    			} 
     
    		}
    		document.getElementById('montant_versement_epargne').value=versement;
    }
    J'ai un versement de x euros, je calcule par rapport au pourcentage la commission a verser à 4,5%. Si je dépasse le plafond alors le plafond s'applique.

    Seulement, mon plafond est à 1500 €, je met un versement entre 0 et 45 €, il me met bien une commission correcte, dès que je mets 45 € de versement, il me prends le plafond.

    Exemple concret, je mets 100 € de versement, à 4.5%
    dans le js en mettant des alertes, j'obtiens :

    if(commission<plafond)
    versement vaut 100.00
    commission vaut 4.50

    mon plafond qui vaut 1500.00 est selectionne

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Points : 125
    Points
    125
    Par défaut
    Salut,

    Je suppose que la fonction "round()" a été définie par toi ou quelqu'un d'autre ? Il y a peut-être un problème à ce niveau là.

    J'ai essayé avec ma propre méthode, et ça fonctionne bien.

    Je t'explique le fonctionnement, au cas où tu serais intéressée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function round(x,y){
    	y=Math.pow(10,y);
    	x=Math.round(x*y)/y;
    	return x;
    }
    x est le nombre à arrondir
    y est le nombre de décimales voulues
    Si le nombre doit être arrondi à 2 décimales, y vaudra 10^2=100
    Ensuite, il multiplie x par 100 (y), avant d'appeler la méthode Math.round() (qui arrondi à l'entier le plus proche).
    Puis il la divise par 100 (y), afin d'avoir 2 chiffres après la virgule.
    10.53564 / multiplié par 100 (y)
    1053.564 / arrondi à l'entier le plus proche (Math.round())
    1054 / divisé par 100 (y)
    10.54

    Évidemment, y sera calculé à 1000 si l'on veut 3 décimales (10^3), ce qui aura pour effet d'arrondir x à 3 décimales, etc.


    Le code entier, qui fonctionne bien chez moi :
    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
    // arrondit le nombre x à y décimales
    function round(x,y){
    	y=Math.pow(10,y);
    	x=Math.round(x*y)/y;
    	return x;
    }
     
    //met a jour le montant de la Commission Epargne 
    function maj_montant_commission_epargne()
    {
    		//recupere le montant du versement epargne
    		var versement=parseFloat(document.getElementById('montant_versement_epargne').value);	
     
    		//pourcentage de la commission epargne
    		var pourcentage=parseFloat(document.getElementById('pourcentage_versement_epargne').value);
     
    		//plafond de la commission epargne a ne pas depasser
    		var plafond=parseFloat(document.getElementById('plafond_commission_epargne').value);
    		plafond=round(plafond,2);
     
     
    		//montant calcule
    		var commission=(versement*pourcentage)/100;
    		commission=round(commission,2);
    		versement=round(versement,2);
     
     
    		if(plafond!=0)
    		{
    			//si le montant de la commission epargne est inferieur au plafond epargne
    			if(commission<plafond)
    			{
    				//ecrit le montant de la commission 
    				document.getElementById('affichage_montant_commission_epargne').value=commission;
    				document.getElementById('montant_commission_epargne').value=commission;
    			}
    			//sinon la commission correspond au plafond
    			else
    			{ 
    				document.getElementById('affichage_montant_commission_epargne').value=plafond;
    				document.getElementById('montant_commission_epargne').value=plafond;
    			} 
     
    		}
    		document.getElementById('montant_versement_epargne').value=versement;
    }

  7. #7
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Bien trouvé la fonction Michael
    ça marche même avec les négatifs : round(1054,-1) === 1050
    Simple et efficace, ils devraient compléter le prototype de Math.round pour ça...

  8. #8
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1

  9. #9
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Points : 125
    Points
    125
    Par défaut
    Bien trouvé la fonction Michael
    ça marche même avec les négatifs : round(1054,-1) === 1050
    Simple et efficace, ils devraient compléter le prototype de Math.round pour ça...
    Merci, ça fait toujours plaisir !

    Cela-dit, puisque la méthode var.toFixed(x) existe, mieux vaut l'utiliser, elle est sûrement plus optimisée. En plus, on ne risque pas d'avoir une erreur parce qu'on a oublié d'importer la fonction.

  10. #10
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    ça fait toujours plaisir que la FAQ ne serve a rien

  11. #11
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par Michaeljackfan Voir le message
    Merci, ça fait toujours plaisir !

    Cela-dit, puisque la méthode var.toFixed(x) existe, mieux vaut l'utiliser, elle est sûrement plus optimisée. En plus, on ne risque pas d'avoir une erreur parce qu'on a oublié d'importer la fonction.
    Oui enfin attention, toFixed cast en string et on peut avoir des surprises avec. C'est bien pour l'affichage mais pour les calculs, je préfère round

Discussions similaires

  1. Ajout de 0 si nombre inférieur à X chiffres
    Par gailup dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/08/2008, 12h16
  2. Réponses: 1
    Dernier message: 06/05/2008, 10h10
  3. Nombres aléatoires suivant autre nombre
    Par Jeoffrey54 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 30/03/2008, 08h50
  4. comparaison une serie de nombre avec une autre serie
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/07/2007, 19h24
  5. [XPATH] test nombre ou caractère ?
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 01/06/2007, 16h04

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