Ambiguïté javascript

Résolu
clintm Messages postés 718 Statut Membre -  
 gaspard -
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
@+

7 réponses

Utilisateur anonyme
 
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
clintm Messages postés 718 Statut Membre 75
 
non, en réalité, les variables sont déclarer avec prompt(), et je n'ai pas mit de guillemets !
0
Utilisateur anonyme
 
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
clintm Messages postés 718 Statut Membre 75
 
ca marche, mais je vois pas en quoi le fait de mettre /1 ca change quelque chose ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
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
ricric Messages postés 34 Statut Membre 7
 
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
clintm Messages postés 718 Statut Membre 75
 
salut,

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

@+
0
gaspard
 
Disons que la solution avec ParseFloat est plus 'propre', plus"correcte", lol /1, c'est comme +0, quelle bidouille !
0