Escribe 0.1 + 0.2 en tu consola. El resultado es 0.30000000000000004. No estás usando una librería con errores, tu navegador no está roto, y tampoco es un bug de JavaScript. Pruébalo en Python, Java, Go o el lenguaje que prefieras y obtendrás exactamente el mismo resultado. Eso se debe a que todos siguen el mismo estándar: IEEE 754.
El problema de la base
En base 10 no puedes representar 1/3 de forma exacta; 0.333... se repite eternamente. Los ordenadores se enfrentan exactamente al mismo problema, solo que en base 2. En binario, 0.1 es 0.000110011..., una fracción que se repite infinitamente. Un número que parece trivial en base 10 se vuelve imposible en base 2.
El límite de 64 bits
Un number de JavaScript ocupa 64 bits en memoria: un bit de signo, once bits de exponente y cincuenta y dos bits de mantisa (fracción). La expansión binaria infinitamente repetida de 0.1 se corta en esos cincuenta y dos bits. Lo que queda es un diminuto error de redondeo, imperceptible. Cuando sumas los errores individuales de 0.1 y 0.2, acabas con 0.30000000000000004.
Invisible en una operación, catastrófico en millones
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // falseEn una sola suma, esta diferencia no rompe nada. Pero cuando tienes cientos de sumas en un carrito de compra o millones de transacciones en un sistema contable, ese error se acumula. Con el tiempo, desaparece un céntimo. Los libros contables no cuadran y las pruebas fallan de forma intermitente.
Advertencia: Nunca guardes dinero como float
Establece la regla básica desde el principio: nunca guardes una moneda como número de coma flotante. Guárdala como un entero en céntimos (o en la unidad mínima que corresponda) y divídela justo antes de mostrarla en pantalla. Si tienes que comparar números, no compruebes la igualdad directa; compara con una tolerancia diminuta: Math.abs(a - b) < Number.EPSILON.
Para terminar
Sigue siendo una pregunta popular en las entrevistas, no por ser una trampa de programación cualquiera, sino porque expone una limitación fundamental de cómo los ordenadores representan los números. Establece esta regla desde el inicio en cualquier sistema que maneje dinero y olvídate del problema.
Hoja de ruta y herramienta interactivas
Desarrollador Frontend Junior 2026
Lo que realmente necesitas saber para conseguir un trabajo de frontend junior en 2026 y lo que puede esperar, a partir de ofertas reales.
¿SQL o NoSQL?
Responde seis preguntas y te diré qué tipo de base de datos encaja con tu proyecto, y por qué.
Sigue leyendo
- CZESLa trampa de `==` y la coerción de tipos en JavaScript
La trampa de `==` y la coerción de tipos en JavaScript
17 de septiembre de 2026 · 3 min de lectura - CZES¿Cuál es la diferencia entre debounce y throttle?
¿Cuál es la diferencia entre debounce y throttle?
15 de septiembre de 2026 · 2 min de lectura