Ambiguïté javascript

Résolu
salut,

j'ai un javascript, avec cette ligne
alert((taux*numb)/100 + numb);

si je met taux = 19.6 et numb=100
au lieu de mettre : 119.6, il met 19.6100
il confond le plus de l'addition avec un plus pour ajouter la variable

est ce qu'il y à un moyen pour retirer ce bug

merci d'avance
@+

--
------------------------------------------
>>Trop de paroles noient la vérité<<

7 réponses

  1. salut,

    merci mais la solution d'avant marche très bien
    merci quand même

    @+
    0
    1. Disons que la solution avec ParseFloat est plus 'propre', plus"correcte", lol /1, c'est comme +0, quelle bidouille !
      0
  2. Bonjour
    Je te propose ces 3 solutions
    <script>
    var taux="19.6";
    var numb="100";

    // Solution 1
    alert( parseFloat(taux) * parseFloat(numb) / 100 + parseFloat( numb ) );

    // Solution 2
    alert( parseFloat(taux * numb) / 100 + parseFloat( numb ) );

    // Solution 3
    taux = parseFloat(taux);
    numb = parseFloat(numb);
    alert((taux*numb)/100 + numb);
    </script>
    0
    1. Par défaut, un prompt te retourne une chaîne de caractères.

      En divisant ta chaîne de caractère par 1, l'interpréteur Javascript conclut qu'il s'agit alors d'un numérique. Lors des opérations suivantes, il le traitera comme tel.

      Le problème avec le signe +, c'est qu'il a une foncton différente suivant que tu l'utilises avec une chaîne de caractères ou un numérique.

      "1"+"2"="12"
      1+2=3

      La division n'existe pas pour une chaîne de carctères, c'est ce qui permet à l'interpréteur de considérer tonn entrée comme un numérique. Si je divise par 1, c'est bien entendu pour ne pas modifier la valeur entrée par l'utilisateur.

      ;-)
      HackTrack
      0
      1. ca marche, mais je vois pas en quoi le fait de mettre /1 ca change quelque chose ?
        0
        1. Alors, c'est que prompt renvoie des chaînes de caractères!

          Essaye ceci:

                  taux=prompt("Entrez le taux")/1;
                  numb=prompt("Entrez une valeur")/1;
          
          	result = (taux*numb)/100 + numb;
          
                  alert(result);
          


          En divisant par 1 la chaîne retournée par la fonction prompt(), celle-ci est considérée comme numérique. Tu peux alors effectuer les calculs que tu désires.

          ;-)
          HackTrack
          0
          1. non, en réalité, les variables sont déclarer avec prompt(), et je n'ai pas mit de guillemets !
            0
            1. Cela ne s'appelle pas de l'ambiguité ni un bug. C'est dû au fait que Javascript est un langage très peu typé. En clair, si tu déclare une variable:

              z = 59.2256;
              


              puis que tu lui appliques une fonction spécifique aux chaînes de caractères (par exemple: substring() ), cela fonctionnera car l'interpréteur Javascript interprétera à ce moment ta variable numérique comme une chaîne de caractères.

              Dans le cas qui te concerne, je pense que tu as déclaré tes variables taux et numb comme des chaînes de caractères:

                var taux="19.6";
                var numb="100";
              


              au lieu de les déclarer comme numériques:

                var taux=19.6;
                var numb=100;
              


              Essaye une fois ce code avec les guillemets, puis sans les guillements autour des valeurs 19.6 et 100.
                      var taux="19.6";
                      var numb="100";
              
                      alert((taux*numb)/100 + numb);
              


              Tu peux constater la différence.

              ;-)
              HackTrack
              0