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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top