0

Estoy aprendiendo a usar Javascript y estaba jugando un poco con el código, el problema es que quiero hacer un ciclo que sume una cantidad muy pequeña de números repetidas veces pero a partir del 5to o 6to ciclo todo se descontrola, alguien que sepa que pasa y me lo explique.

setTimeout(() => console.log("Hello world"), 0);
var milisegundo = 0.0001;
var total = 0;
var ciclos = 10;
for (var i = 0; i <= ciclos; i++) {
  console.log(total);
  total += milisegundo;
  if (i === ciclos) {
  console.log(`El programa tardo ${total} en finalizar`)
  }
}

introducir la descripción de la imagen aquí

Mauricio Contreras
  • 13,660
  • 3
  • 18
  • 40
  • 3
    ¿Responde esto a tu pregunta? [¿Por qué mis programas no pueden hacer cálculos aritméticos correctamente?](https://es.stackoverflow.com/questions/197/por-qu%c3%a9-mis-programas-no-pueden-hacer-c%c3%a1lculos-aritm%c3%a9ticos-correctamente) – Trauma Jul 20 '20 at 05:19

1 Answers1

2

Los números de punto flotante no son precisos, por eso los resultados, puedes aplicar varias estrategias para redondear la cifra, por ejemplo:

setTimeout(() => console.log("Hello world"), 0);
var milisegundo = 0.0001;
var total = 0;
var ciclos = 10;

for (var i = 0; i <= ciclos; i++) {
    console.log(total.toFixed(4))
    total += milisegundo;
    if (i === ciclos) {
        console.log(`El programa tardo ${total.toFixed(4)} en finalizar`)
    }
}

Otra sería aplicando una división:

setTimeout(() => console.log("Hello world"), 0);
var milisegundo = 1;
var total = 0;
var ciclos = 10;

for (var i = 0; i <= ciclos; i++) {
    console.log(total/10000)
    total += milisegundo;
    if (i === ciclos) {
        console.log(`El programa tardo ${total/10000} en finalizar`)
    }
}