AD

¿Ya dominas lo básico? Un curso estructurado de Kotlin es la vía rápida para dar el salto.

Ver cursos de Kotlin en Udemy

Enlace de afiliado. No te cuesta nada extra.

🎯Lecciones de Kotlin
Lección 57 / 68

Cuidado con los errores de la coma flotante

En esta lección verás por qué 0.1 + 0.2 no da exactamente 0.3.

Los decimales se guardan en binario, y en binario 0,1 no tiene representación exacta, igual que 1/3 no la tiene en base diez. Al sumar, esos errores diminutos se acumulan.

El código de ejemplo muestra la suma y luego la compara con 0,3, que da false.

La regla es no comparar decimales con ==. Lo correcto es comprobar que la diferencia es menor que una tolerancia: abs(a - b) < 1e-9.

Hay una trampa adicional en la JVM que conviene conocer: Double.NaN != Double.NaN devuelve true, porque «no es un número» no es igual a nada, ni siquiera a sí mismo. Pero si metes ese valor en una lista, contains sí lo encuentra, porque las colecciones usan equals y no el operador. Esa incoherencia sorprende a todo el mundo la primera vez.

Y con dinero, ni tolerancias: usa BigDecimal, que opera en base diez, o guarda los importes en céntimos como enteros. Esto no es una peculiaridad de Kotlin: es el estándar IEEE 754 y funciona igual en todos los lenguajes.

📖 Código de referencia
✍️ Tu código
Escribe tu código y pulsa «Ejecutar»

🧪 Este sitio no puede compilar ni ejecutar Kotlin directamente, así que comprueba al instante si lo que escribiste coincide con el código de referencia (la corrección ocurre por completo en tu navegador; no se envía nada a ningún servidor).

🔗 El mismo tema en otros lenguajes

Mira cómo se escribe lo mismo en otro lenguaje.

Espacio publicitario (banner)
Espacio publicitario (en el artículo)