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 :

Manières d'automatiser un calcul


Sujet :

JavaScript

  1. #1
    Membre chevronné
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 392
    Par défaut Manières d'automatiser un calcul
    Bonjour,

    Le code ci-dessous est un exemple de la manière dont je m'y prenais pour automatiser un calcul. Je me dis que cette manière de procéder est probablement démodée. En particulier, je me demande si l'attribut "name" de la balise "form" n'est pas déprécié.
    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
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <script>
          function calculer() {
            x=document.f.nb_a.value;
            y=document.f.nb_b.value;
            x=x*1;
            y=y*1;
            z=x*y+3;
            document.f.resultat.value=z;
          }
        </script>
      </head>
      <body>
        <form name="f">
          <p>a = <input name="nb_a"></p>
          <p>b = <input name="nb_b"></p>
          <input type="button" value="CALCULER" onclick="calculer();">
          <p>a x b + 3 = <input name="resultat"></p>
        </form>
      </body>
    </html>
    Le code ci-dessous vous paraît-il conforme à ce qu'il devrait se faire actuellement?
    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
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <script>
          function calculer() {
            x=document.getElementById("nb_a").value;
            y=document.getElementById("nb_b").value;
            x=x*1;
            y=y*1;
            z=x*y+3;
            document.getElementById("resultat").value=z;
          }
        </script>
      </head>
      <body>
        <p>a = <input id="nb_a"></p>
        <p>b = <input id="nb_b"></p>
        <input type="button" value="CALCULER" onclick="calculer();">
        <p>a x b + 3 = <input id="resultat"></p>
      </body>
    </html>
    Merci par avance pour vos réponses.

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par eleydet
    Le code ci-dessous vous paraît-il conforme à ce qu'il devrait se faire actuellement?
    non
    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
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <script>
           function init()  {
            var a=document.getElementById("nb_a");
            var b=document.getElementById("nb_b");
            var r=document.getElementById("resultat");
            document.getElementById('bouton').onclick = function() {
              x= parseInt(a.value, 10);
              y= parseInt(b.value, 10);
              r.value=x*y+3;
            }
          }
        </script>
      </head>
      <body onload="inti();">
        <p>a = <input type="number"  id="nb_a"></p>
        <p>b = <input type="number"  id="nb_b"></p>
        <button id="bouton">calculer</buttton>
        <p>a x b + 3 = <input id="resultat"></p>
      </body>
    </html>
    explication la fonction init récupère une référence sur les trois input elle crée une methode dans l'object bouton qui fait le calcul.
    ainsi la recherche des élément dans le dom ne se fait qu'une fois. a b et r sont donc les trois élément du dom.

    le contenu de la fonction x est la valeur de l'entier contenu dans la valeur de l'input donc pas d'utilise de *1 pour forcer la conversion mais un parseInt en base 10.
    tu peux aussi utiliser parseFloat si ce sont des nombre réels.

    pour finir le html
    les input sont de type "number" l'input de type button c'est pour les formulaire. là on n'a pas de form donc on utilise un simple bouton

    A+JYT

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    J'ai essayé ton code ici : http://jsbin.com/jidaxujofu/edit?html,console,output (une erreur avait été signalée (faute de frappe sans doute) j'ai alors remplacé onload="inti(); par onload="init();).

    Cela fonctionne et je me suis demandé si c'était normal que le troisième paragraphe soit à l'intérieur du bouton ? (c'est jolie au passage).

    Citation Envoyé par sekaijin Voir le message

    le contenu de la fonction x est la valeur de l'entier contenu dans la valeur de l'input donc pas d'utilise de *1 pour forcer la conversion mais un parseInt en base 10.
    tu peux aussi utiliser parseFloat si ce sont des nombre réels.
    Que penses-tu de l'usage du "+" : x= +a.value; à la place de x= parseInt(a.value, 10);. J'ai lu que ça marchait bien apparemment mais le code est peut-être moins lisible ?


    EDIT : Il semble qu'utiliser la fonction parseInt soit préférable car quand la string ne correspond pas à un nombre elle renvoie "NaN" alors qu'avec le "+" cela renvoie le nombre 0 apparemment...

  4. #4
    Membre chevronné
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 392
    Par défaut
    Bonsoir,

    Ce qui me vient, à chaud :

    - Si le troisième paragraphe est à l'intérieur du bouton, c'est parce qu'il fallait écrire </button> à la place de </buttton>...

    - C'est étonnant : a.value est type chaîne de caractères. Et si on entre "4,6" dans le champ de saisie, la chaîne de caractères obtenue est "4.6". La virgule a été remplacée par un point. Il faut donc effectivement convertir a.value en nombre.

    - J'ai préféré parseFloat() à parseInt(). Pour les nombres entrés par l'utilisateur, le séparateur des décimales doit être la virgule. Par contre, le résultat s'affiche avec un point à la place de la virgule.

    - Tant qu'à faire, autant séparer complètement le HTML du JavaScript.
    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
    ...
        <script>
           onload=function()  {
            var a=document.getElementById("nb_a");
            var b=document.getElementById("nb_b");
            var r=document.getElementById("resultat");
            document.getElementById('bouton').onclick = function() {
              x= parseFloat(a.value, 10);
              y= parseFloat(b.value, 10);
              r.value=x+y;
            }
          }
        </script>
      </head>
      <body>
    ...
    En tous les cas, merci pour vos commentaires qui invitent à la réflexion.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par eleydet Voir le message
    - Si le troisième paragraphe est à l'intérieur du bouton, c'est parce qu'il fallait écrire </button> à la place de </buttton>...
    Ah oui bien vue ! Je me demande s'il existe des outils qui signalent ce genre de faute de frappe ?

  6. #6
    Membre chevronné
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 392
    Par défaut
    Bonjour,

    Une solution qui signale les fautes de frappe consiste à ouvrir la page avec Firefox (avec les autres navigateurs, je n'ai pas essayé) puis à taper sur les touches CTRL et U du clavier. Cela affiche le code source de la page, avec du rouge là où il y a une faute de frappe...

    Sinon j'ai regardé la documentation :
    https://developer.mozilla.org/fr/doc...Element/Button
    Elle indique qu'il est possible, avec l'élément <button>, de soumettre le formulaire au serveur distant, de la même manière qu'avec un élément <input>.

  7. #7
    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,
    Citation Envoyé par Beginner.
    Je me demande s'il existe des outils qui signalent ce genre de faute de frappe ?
    tu peux toujours soumettre ton code au validateur HTML, par exemple https://validator.w3.org/.

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Merci.

    Oui j'ai testé vos suggestions et effectivement cela permet de repérer la faute de frappe...

    Ceci dit ce serait bien si ce genre de chose était signalé automatiquement par l'éditeur (je crois que c'est le cas de certains d'ailleurs)...

  9. #9
    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
    La plupart des éditeurs proposent/offrent la coloration syntaxique qui permet de voir les erreurs de frappe, de plus il existe souvent une option de fermeture automatique des balises, entre autres.

  10. #10
    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
    Citation Envoyé par eleydet Voir le message
    - C'est étonnant : a.value est type chaîne de caractères.
    Oui, je me fais souvent avoir. Pourtant c’est dans la spec :
    The input element represents a control for setting the element's value to a string representing a number.
    En français (je traduis comme je peux) :
    L’élément input représente un contrôle pour assigner à la valeur de l’élément une chaîne représentant un nombre.
    Citation Envoyé par eleydet Voir le message
    Et si on entre "4,6" dans le champ de saisie, la chaîne de caractères obtenue est "4.6". La virgule a été remplacée par un point.
    Les inputs sont localisés, c’est-à-dire qu’ils dépendent de la langue dans laquelle le navigateur est configuré. On trouve trace de ça dans le ticket de bug assigné à l’implémentation des input number dans Firefox : https://bugzilla.mozilla.org/show_bug.cgi?id=344616#c14
    Comme dans les logiciels de bureautique, les nombres décimaux en français sont écrits avec une virgule, alors qu’en américain ils utilisent le point. L’attribut value, bien que de type chaîne, représente une donnée de type nombre dans le langage qui demande cette value. Je ne sais pas si je suis très clair. Concrètement : vu qu’ici on est en JavaScript, l’expression JavaScript a.value va renvoyer une représentation chaîne d’un nombre JavaScript, et les nombres JavaScript utilisent le point. Peu importe la langue de l’UI. On a donc une différence entre ce que voit l’utilisateur et comment la donnée est représentée en interne.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    La plupart des éditeurs proposent/offrent la coloration syntaxique qui permet de voir les erreurs de frappe, de plus il existe souvent une option de fermeture automatique des balises, entre autres.
    Oui effectivement !

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

Discussions similaires

  1. Automatisation de calcul avec excel
    Par duduf10 dans le forum Excel
    Réponses: 6
    Dernier message: 17/01/2013, 15h37
  2. Réponses: 6
    Dernier message: 24/01/2012, 11h42
  3. [AC-2003] Automatiser le calcul de mon solde
    Par RoZyk dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/02/2010, 13h48
  4. Automatiser le calcul de "Code Metrics"
    Par Bluedeep dans le forum Visual Studio
    Réponses: 0
    Dernier message: 26/05/2009, 11h58
  5. Quel langage pour automatiser des calculs acoustiques ?
    Par michael.mytnik dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 04/01/2007, 18h51

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