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
@+
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
@+
A voir également:
- Ambiguïté javascript
- Telecharger javascript - Télécharger - Langages
- A javascript error occurred in the main process - Forum Handicap / Accessibilté
- Javascript arrondi - Forum Javascript
- Afficher un tableau javascript en html ✓ - Forum Javascript
- Javascript arrondi après la virgule ✓ - Forum Windows
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:
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:
au lieu de les déclarer comme numériques:
Essaye une fois ce code avec les guillemets, puis sans les guillements autour des valeurs 19.6 et 100.
Tu peux constater la différence.
;-)
HackTrack
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
Alors, c'est que prompt renvoie des chaînes de caractères!
Essaye ceci:
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
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
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
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>
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>