Ambiguïté javascript
Résolu
clintm
Messages postés
718
Statut
Membre
-
gaspard -
gaspard -
salut,
j'ai un javascript, avec cette ligne
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é<<
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
-
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 -
non, en réalité, les variables sont déclarer avec prompt(), et je n'ai pas mit de guillemets !
-
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 -
ca marche, mais je vois pas en quoi le fait de mettre /1 ca change quelque chose ?
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -
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> -
salut,
merci mais la solution d'avant marche très bien
merci quand même
@+