JavaScript se multipliant de manière incorrecte, provoquant un arrondi incorrect
-
29-10-2019 - |
Question
Lorsque je tire les valeurs que je veux multiplier, ce sont des cordes. Je les tire donc, les analyse en flottant (pour préserver les décimales) et les multiplier ensemble.
LineTaxRate = parseFloat(myRate) * parseFloat(myQuantity) * parseFloat(myTaxRateRound);
Cela a fonctionné pour 99% de mes factures, mais j'ai découvert un problème très étrange.
Quand il s'est multiplié: 78 * 7 * 0.0725
JavaScript revient: 39.584999999999994
Lorsque vous faites normalement le calcul dans une calculatrice, c'est: 39.585
Quand tout est dit et fait, je prends ce numéro et je le tourne en utilisant .tofixé (2)
Parce que JavaScript renvoie ce nombre, il ne s'arrête pas à la valeur souhaitée de: $39.59
j'ai essayé Math.round () Le total mais j'obtiens toujours le même numéro.
J'ai pensé à arrondir le nombre à 3 décimales puis à deux, mais cela me semble hacky.
J'ai cherché partout et tout ce que je vois, c'est que les gens mentionnent que Parsefloat perd sa précision, et pour utiliser .tofixé, mais dans l'exemple ci-dessus, cela n'aide pas.
Voici mon script de test que j'ai fait pour recréer le problème:
<script>
var num1 = parseFloat("78");
var num2 = parseFloat("7");
var num3 = parseFloat("0.0725");
var myTotal = num1 * num2 * num3;
var result = Math.round(myTotal*100)/100
alert(myTotal);
alert(myTotal.toFixed(2));
alert(result);
</script>
Pas de solution correcte