Alguien sabe porque pasa esto en JavaScript?
Asked
Active
Viewed 132 times
4
Alter Lagos
- 5,211
- 2
- 13
- 26
Luis Miguel Baez
- 760
- 1
- 5
- 15
-
1Pusible 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 Answers
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
-
2Gracias 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
cardeol
- 1,390
- 3
- 10