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 :

Gestion des décimales


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut Gestion des décimales
    Salut à tous,

    Je souhaite réaliser quelque chose d'assez basique : un compteur affichant une consommation électrique.
    Sur la base d'une valeur de consommation que j'aurais calculé au préalable, par seconde, je souhaite que ma page affiche un compteur qui incrémentera chaque seconde la valeur cumulée.

    J'ai récupéré un bout de code, que j'essaie d'adapter et pour lequel je ne souhaite afficher que 2 ou 3 décimales.

    J'ai trouvé sur le net que "Math.round" pouvait être utilisé pour gérer ça, mais j'ai l'impression que ma façon de l'utiliser (voir ligne en commentaire, verte) n'est pas très propre...

    Merci d'avance !

    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
    <html>
    <head>
    <title>Compteur énergétique</title>
    
    <style>
    *
    {
    	font-size : 14pt;
    	font-family : Calibri;
    }
    </style>
    
    <script>
    
    var compteur=0.022;  // Compteur global à zéro par défaut
    
    function incremente()
    {
    	// Récupère le champ compteur
    	var cpt = document.getElementById("compteur");
    	cpt.value = compteur;
    	// Incrémente le compteur global
    	compteur=(compteur+0.022);
        //compteur=Math.Round((compteur+0.022)*100)/100;
    	setTimeout("incremente()",1000);
    } 	
    
    function load()
    {
    	incremente();
    }
    
    </script>
    </head>
    <body onload="load();">
    <form>
    Vous avez consommé : <input type='text' value='0' id='compteur' size='1'> W
    </form>
    </body>
    </html>

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 201
    Par défaut
    Bonjour,
    perso je gérerais un compteur entier que je multiplierais par 0.22 à chaque fois.
    Pour l'affichage propre cela peut se faire avec la méthode toFixed(), et je le fareis dasn un SPAN et non dans un INPUT
    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
    <html>
    <head>
    <title>Compteur énergétique</title>
    <style type="text/css">
    * {
      font-size : 14pt;
      font-family : Calibri;
    }
    </style>
    <script type="text/javascript">
    var iCount = 1;
    function incremente(){
      // Récupère le champ compteur
      var oSpan = document.getElementById("compteur");
      oSpan.innerHTML = (iCount *0.22).toFixed(2);
      // Incrémente le compteur global
      iCount ++;    
      setTimeout( incremente, 1000); // appel direct
    } 	
    function Init(){
      incremente();
    }
    </script>
    </head>
    <body onload="Init();">
    Vous avez consommé : <span id='compteur'></span> W
    </body>
    </html>
    au passage changement dans la balise SCRIPT,il est préférable de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript">
    idem pour la balise STYLE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <style type="text/css">
    et modification du nom de la fonction load pour une dénomination de Init par exemple

    <EDIT>
    l'utilisation d'un compteur associé à setTimeout avec en délai 1000 ne te garanti pas qu'au bout de 10 secondes, par exemple, tu as consommé 10*.22
    </EDIT>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    Merci beaucoup pour cette réponse de grande qualité et tes conseils !

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 201
    Par défaut
    <EDIT>
    l'utilisation d'un compteur associé à setTimeout avec en délai 1000 ne te garanti pas qu'au bout de 10 secondes, par exemple, tu as consommé 10*.22
    </EDIT>
    je te livre un petit exemple pour te monter la lacune de l'utilisation d'un compteur, surtout dans ton cas
    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
    <html>
    <head>
    <title>Compteur énergétique</title>
    <style type="text/css">
    * {
      font-size : 14pt;
      font-family : Calibri;
    }
    </style>
    <script type="text/javascript">
    var tDeb, tNow, iCount = 0;
    function incremente(){
      // Récupère le champ compteur
      var oSpan1 = document.getElementById("compteur1");
      var oSpan2 = document.getElementById("compteur2");  
      // get maintenant
      tNow = new Date().getTime();
      // calcul conso
      var Conso = (tNow -tDeb) *0.022 /1000;
      // affichage conso
      oSpan1.innerHTML = (iCount *0.022).toFixed(3);
      oSpan2.innerHTML = Conso.toFixed(3);  
      // Incrémente le compteur global
      iCount ++;    
      setTimeout( incremente, 1000);
    } 	
    function Init(){
      // init temps de demarrage
      tDeb = new Date().getTime();
      incremente();
    }
    </script>
    </head>
    <body onload="Init();">
    <button onclick="alert('Stop !\nFin de consomation...');">Stop !</button><br>
    Méthode compteur : <span id='compteur1'></span> W<br>
    Méthode getTime() : <span id='compteur2'></span> W<br>
    </body>
    </html>
    n'hésites pas à appuyer sur le bouton Stop ! et observes ce qui ce passe.

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

Discussions similaires

  1. Gestion des décimales excédentaires
    Par pat29 dans le forum Administration
    Réponses: 3
    Dernier message: 09/07/2011, 17h06
  2. Champ de fusion CALCUL, gestion des décimales
    Par ValPhi dans le forum Word
    Réponses: 9
    Dernier message: 02/10/2008, 20h10
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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