Lorsque je tire les valeurs que je veux multiplier, ce sont des chaînes de caractères. Je les extrais donc, les analyse en tant que flottants (pour préserver les décimales) et les multiplie 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 est de retour : 39.584999999999994
Lorsque vous faites normalement le calcul avec une calculatrice, son.. : 39.585
Quand tout est dit et fait, je prends ce chiffre et je l'arrondis en utilisant les chiffres suivants .toFixed(2)
Parce que Javascript renvoie ce nombre, il n'arrondit pas à la valeur désirée de : $39.59
J'ai essayé Math.round() le total mais j'obtiens toujours le même chiffre.
J'ai pensé à arrondir le nombre à trois décimales puis à deux, mais cela me semble peu pratique.
J'ai cherché partout et tout ce que je vois, c'est que les gens mentionnent que parseFloat perd sa précision, et qu'il faut utiliser .toFixed, mais dans l'exemple ci-dessus, cela n'aide pas.
Voici mon test script 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>