4

Alguien sabe porque pasa esto en JavaScript?

introducir la descripción de la imagen aquí

Alter Lagos
  • 5,211
  • 2
  • 13
  • 26
Luis Miguel Baez
  • 760
  • 1
  • 5
  • 15
  • 1
    Pusible dupliado de [¿Por qué mis programas no pueden hacer cálculos aritméticos correctamente? ](https://es.stackoverflow.com/q/197/92764) – Nery Ortez Aug 14 '18 at 15:11

2 Answers2

5

Es un error con los números de tipo float. Debido a la naturaleza binaria de su codificación, algunos números decimales no se pueden representar con exactitud perfecta.

Para solucionarlo puedes utilizar el toFixed o Math.Round

var value = 3.3333333;
value.toFixed(2);
//Resultado: 3.34

Puedes leer este artículo http://adripofjavascript.com/blog/drips/avoiding-problems-with-decimal-math-in-javascript.html

Hugo Quiñónez
  • 1,225
  • 1
  • 7
  • 11
  • 2
    Gracias Alfredo por tu comentario, solo nota que la pregunta es: ¿Por qué sucede? y aparte de contestarla sugiero una solución. – Hugo Quiñónez Aug 14 '18 at 15:16
  • 1
    +1 Está es la manera correcta de manejar los números de punto flotante en EcmaScript – Azteca Aug 14 '18 at 17:57
  • La razon es que siempre va a existir un margen de error al representar numeros racionales incluyendo decimales periodicos utilizando un numero de bits finito. La precision es proporcional al numero de bits de representacion. – cardeol Aug 21 '18 at 09:12
4

Es porque Javascript convierte los numeros internamente a double. Esto genera un efecto llamado Inexactitud de Punto Flotante. Basta con redondear el numero en el formato deseado usando funciones numericas como Math.round, Math.floor, toFixed, etc.

Se pueden ver algunos ejemplos aqui

https://code.i-harness.com/es/q/200d0a

cardeol
  • 1,390
  • 3
  • 10