1
votes

Quel est le problème avec mon équation mathématique simple

J'essaie de créer une calculatrice simple qui renverra le montant de la taxe de vente plus le montant après taxe. Si j'entre 80 $ et que la taxe de vente est de 7,5%, je devrais récupérer un montant de 86 $, mais au lieu de cela, je reçois 806 $. Je ne sais pas pourquoi.

    //calculation
    var total = (itemCost + (itemCost * salesTax/100));


    total = Math.round(total) 


1 commentaires

itemCost et salesTax sont des chaînes.


3 Réponses :


2
votes

vous avez besoin de var total = (parseInt (itemCost) + (parseInt (itemCost) * salesTax / 100));


2 commentaires

Que fait parseInt?


La fonction parseInt () analyse une chaîne et renvoie un entier, comme le montre la Fonction JavaScript parseInt () < / a>. Vous devez convertir la chaîne en entier avant d'effectuer le calcul.



1
votes

Lorsque vous obtenez les valeurs des champs de texte, vous avez des chaînes. Javascript fait beaucoup d'inférence de type, c'est pourquoi cela fonctionne presque. Votre expression est traduite en:

(Chaîne) "80" + ((Chaîne) "80" * (entier) 0,075)

(Chaîne) "80" + (entier) 6

Et maintenant, l'opérateur String + (String, Any) est appelé, qui est défini comme une concaténation de chaînes. Par conséquent, vous vous retrouvez avec "80" + "6" => "806".

Si vous écrivez par exemple: "80" * "1" + "80" * "7.5" / "100" vous obtiendriez en effet le résultat attendu de 86.

Mais pour être sûr que tout fonctionne comme prévu, vous devez en effet analyser les valeurs d'une valeur de chaîne à une valeur numérique (avec parseInt resp. parseFloat).


0 commentaires

2
votes

Le fait est que lorsque vous récupérez la valeur, c'est une chaîne. Analysez-le comme une valeur numérique en faisant:

var salesTax = Number(document.getElementById("salesTax").value);


0 commentaires