Los errores de redondeo son un problema común en JavaScript y en otros lenguajes de programación al trabajar con números en coma flotante.
Si alguna vez realizas operaciones matemáticas de números con decimales en JavaScript puedes encontrarte con la siguiente situación, donde una operación básica no da el resultado esperado:
console.log(0.05 + 0.01); // = 0.060000000000000005
Este tipo de comportamiento puede causar errores extraños en los cálculos, generando resultados matemáticos que parecen incorrectos. Imagina que estás desarrollando una aplicación bancaria, una rifa de lotería o incluso enviando una nave espacial al espacio: cualquier error numérico podría llegar a ser catastrófico.
Estas incorreciones suceden debido a la forma en que los números en coma flotante son representados en los ordenadores. JavaScript utiliza el estándar IEEE 754 para representar números en punto flotante de 64 bits. Debido a limitaciones de precisión y a la conversión de números decimales a binarios, se generan errores de redondeo en ciertas operaciones matemáticas.
Si buscas en internet, encontrarás muchas soluciones, algunas más recomendables que otras. Una de las sugerencias más básicas y menos recomendadas es almacenar todos los valores como enteros y luego formatearlos para su visualización. Aunque esto puede funcionar en algunos casos, no siempre es práctico.
La mejor opción es utilizar librerías especializadas y bien probadas, como math.js, que manejan números con mayor precisión y evitan los problemas de redondeo inherentes a IEEE 754.
Otra recomendación común es usar el método integrado toFixed()
de los números en JavaScript.
Cuando se muestran los resultados de cálculos como 0.1 + 0.2
a los usuarios, no siempre es necesario mantener una precisión absoluta. En JavaScript, los usuarios podrían enfrentarse a resultados extraños y poco intuitivos, como 0.30000000000000004
, lo que puede generar confusión al visualizar valores en una página web.
En estos casos simples, una buena estrategia es truncar o redondear manualmente el número a una cantidad específica de decimales antes de mostrarlo.
Por ejemplo, en JavaScript, puedes hacerlo de la siguiente manera:
const resultado = 0.1 + 0.2;const resultadoFormateado = resultado.toFixed(2); // toFixed(x) devuelve un string con x decimalesconsole.log(resultadoFormateado); // imprime "0.30"
Esto garantiza que el usuario vea un número más claro y legible, evitando errores visuales debidos a la representación interna de los números en coma flotante.
Los números en JavaScript son realmente números en coma flotante basados en el estándar IEEE 754. Debido a las limitaciones de representación en base 2 y la precisión finita de las computadoras, los errores de redondeo son inevitables.
Si necesitas realizar cálculos precisos, lo mejor es utilizar una biblioteca matemática en lugar de intentar corregir estos errores manualmente. Además, si tu aplicación depende en gran medida de cálculos numéricos avanzados, quizás deberías considerar si JavaScript es el mejor lenguaje para tu caso de uso, o si sería más adecuado utilizar otro lenguaje especializado en cálculos de precisión, como Python con decimal
o Rust, o Java con bigdecimal
. Si por el contrario sólo quieres mostrar calculos con una presición de pocos decimales en JavaScript, considera usar el método toFixed()
.