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>

Respuestas a la pregunta(3)

Su respuesta a la pregunta