Ambiguïté javascript

Résolu/Fermé
clintm Messages postés 689 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 10 juin 2015 - 4 avril 2006 à 11:50
 gaspard - 10 déc. 2006 à 16:06
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
4 avril 2006 à 12:59
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 689 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 10 juin 2015 75
4 avril 2006 à 13:26
non, en réalité, les variables sont déclarer avec prompt(), et je n'ai pas mit de guillemets !
0
Utilisateur anonyme
4 avril 2006 à 13:39
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 689 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 10 juin 2015 75
4 avril 2006 à 13:44
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
4 avril 2006 à 14:42
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 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 11 mai 2006 7
4 avril 2006 à 15:38
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 689 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 10 juin 2015 75
4 avril 2006 à 15:43
salut,

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

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