0

Estoy usando un for con un incremento de 0.2, Los resultados que imprime son 0, 0.2, 0.4, 0.6000000000000001, 0.8, y así llega a 9.999999999999996.

for(let i = 0; i <= 10; i = i + 0.2){
    console.log("Valor de incremento 0.2:",i);
}

Lo que quiero obtener es 0, 0.2, 0.4, 0.8, 1, 1.2, 1.4 hasta llegar a 10. Espero me puedan Ayudar, Muchas Gracias

Jaime Menéndez
  • 5,704
  • 2
  • 7
  • 21
  • Hay una pregunta que seguro alguno de los miembros mas conocidos de stackoverflow colocara aqui referente a eso, ya es bastante popular esa pregunta, pero en resumen, se debe a que no se pueden hacer operaciones muy exactas debido a e que el sistema que manejan los pc es binario. – Riven Apr 09 '22 at 00:02
  • En alguna parte ví porque es que javascript tiene problemas con los decimales. Daban una explicación razonable, para eso. Porque otros lenguajes de programación no tienen ese problema. Pero bueno hay unos videos que puedes encontrar como `problema de JAVASCRIPT y los DECIMALES` despues de verlo puedes entender como solucionarlo. – Alexander Diaz Apr 09 '22 at 00:06
  • Muchas Gracias por su ayuda!! – Charles.Way Apr 09 '22 at 00:08
  • @AlexanderDiaz todos los lenguajes tienen un tipo `float` justo con esos mismos problemas, porque la mayoría se basan en el estándar [IEEE_754](https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats) para asegurar compatibilidad, la diferencia es que tienen otros tipos de datos en los que lo solucionan, como mismo en javascript se introdujo `BigInt` para ello. Charles, si quieres "Parchear" de cierto modo el problema en tu caso particular, consume usa `toFixed` para redondear el número dentro del for: `console.log("Valor de incremento 0.2:",i.toFixed(1));` – Jaime Menéndez Apr 09 '22 at 00:12
  • @JaimeMenéndez Cada día se aprende algo nuevo, no se porque tenía la impresión de que era solo en javascript. – Alexander Diaz Apr 09 '22 at 00:19
  • Charles, [esta es la pregunta](https://es.stackoverflow.com/questions/197/por-qu%C3%A9-mis-programas-no-pueden-hacer-c%C3%A1lculos-aritm%C3%A9ticos-correctamente/) qué mencionaba @Riven y es una lectura MUY RECOMENDADA. Está enfocada `lenguaje-agnóstico` porque es algo que te vas a encontrar en todos los lenguajes y más vale estar al tanto de ello. – Jaime Menéndez Apr 09 '22 at 00:20
  • ¿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) – Mauricio Contreras Apr 09 '22 at 05:24

2 Answers2

1

Una de las mejores maneras para solucionar este problema es usar el Number y el toFixed()

for(let i = 0; i <= 10; i = i + 0.2){
    console.log("Valor de incremento 0.2:",Number(i.toFixed(1)));
}
Alexander Diaz
  • 534
  • 2
  • 7
1

Se me ocurre aumentar de a 2 unidades y dividirlo por 10

for(let i = 0; i <= 10; i = i + 2){
console.log("Valor de incremento 0.2:",i/10);

}

Sergio Antozzi
  • 435
  • 2
  • 7