Escritos

Por qué 0.1 + 0.2 no es igual a 0.3

Escribe `0.1 + 0.2` en tu consola y no obtendrás `0.3`. No es un bug de JavaScript: obtendrás exactamente el mismo resultado en Python, Java o Go. IEEE 754, mantisas y por qué nunca debes guardar dinero como float.

Furkan Özay15 de septiembre de 2026 · 2 min de lectura
czCZAY.DEV // EDITORIALES
JAVASCRIPT CORE

#Web Temelleri · 2 MIN DE LECTURA

FURKAN ÖZAYVOL. 2026 // #3273
JS

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

JavaScript
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // false

En 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

Sigue leyendo