Manejo de la precisión flotante en Javascript [duplicado]
Tengo una gran cantidad de valores numéricos y
en javascript. Quiero agruparlos redondeándolos al múltiplo más cercano x
y convertir el resultado en una cadena.
¿Cómo puedo evitar la molesta precisión del punto flotante?
Por ejemplo:
0.2 + 0.4 = 0.6000000000000001
Dos cosas he probado:
>>> y = 1.23456789
>>> x = 0.2
>>> parseInt(Math.round(Math.floor(y/x))) * x;
1.2000000000000002
y:
>>> y = 1.23456789
>>> x = 0.2
>>> y - (y % x)
1.2000000000000002
Aceptado
De esta publicación: ¿Cómo lidiar con la precisión de números de punto flotante en JavaScript?
Tienes pocas opciones:
- Utilice un tipo de datos especial para decimales, como decimal.js
- Formatee su resultado con un número fijo de dígitos significativos, como este:
(Math.floor(y/x) * x).toFixed(2)
- Convierte todos tus números a enteros
Podrías hacer algo como esto :
> +(Math.floor(y/x)*x).toFixed(15);
1.2
Editar: sería mejor usar big.js.
grande.js
Una biblioteca pequeña, rápida y fácil de usar para aritmética decimal de precisión arbitraria.
>> bigX = new Big(x)
>> bigY = new Big(y)
>> bigY.div(bigX).round().times(bigX).toNumber() // => 1.2