Javascript se multiplica incorrectamente, causando redondeo incorrecto
Cuando extraigo los valores que quiero multiplicar, son cadenas. Así que los extraigo, los analizo como flotantes (para preservar los lugares decimales) y los multiplico juntos.
LineTaxRate = parseFloat(myRate) * parseFloat(myQuantity) * parseFloat(myTaxRateRound);
Esto ha funcionado para el 99% de mis facturas pero descubrí un problema muy extraño.
Cuando se multiplicó: 78 * 7 * 0.0725
Javascript regresa: 39.584999999999994
Cuando normalmente haces los cálculos en una calculadora es: 39.585
Cuando todo está dicho y hecho, tomo ese número y lo redondeo usando .toFixed (2)
Porque Javascript está devolviendo ese número, no se está redondeando al valor deseado de: $ 39.59
Lo intenté Math.round () el total pero sigo obteniendo el mismo número.
e pensado en redondear el número a 3 decimales y luego a dos, pero eso me parece raro.
He buscado en todas partes y todo lo que veo es que las personas mencionan que parseFloat pierde su precisión, y usar .toFixed, sin embargo, en el ejemplo anterior, eso no ayuda.
Aquí está mi script de prueba que hice para recrear el problema:
<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>