JavaScript se multiplica incorrectamente, causando un redondeo incorrecto
-
29-10-2019 - |
Pregunta
Cuando aprieto los valores, quiero multiplicar, son cuerdas. Así que los aprieto, los analizo como flotadores (para preservar los lugares decimales) y multiplicarlos.
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 está volviendo: 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 rodeo usando .tofijo (2)
Debido a que JavaScript está devolviendo ese número, no está redondeado al valor deseado de: $39.59
Lo intenté Math.round () El total pero todavía obtengo el mismo número.
He pensado en redondear el número a 3 decimales que a dos, pero eso me parece hacky.
He buscado en todas partes y todo lo que veo es que la gente menciona que Parsefloat pierde su precisión, y usar .tofijo, sin embargo, en el ejemplo anterior, eso no ayuda.
Aquí está mi guión 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>
No hay solución correcta