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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top