JavaIntermedio9 oct 2025

El baile de los decimales: Cuando 1.0 no es igual a 1.00

snippet.java
import java.math.BigDecimal;

public class BigDecimalWtf {
    public static void main(String[] args) {
        BigDecimal value1 = new BigDecimal("1.0");
        BigDecimal value2 = new BigDecimal("1.00");

        System.out.println("Are they equal with equals()? " + value1.equals(value2));
        System.out.println("Are they equal with compareTo()? " + (value1.compareTo(value2) == 0));
    }
}

¿Qué crees que imprime?

Salida Esperada

Are they equal with equals()? true
Are they equal with compareTo()? true

⚠️ Salida Real

Are they equal with equals()? false
Are they equal with compareTo()? true

¿Por qué pasa esto?

¡Amigos programadores! Hoy nos adentramos en el fascinante (y a veces frustrante) mundo de `BigDecimal`. Uno esperaría que `1.0` y `1.00` fueran matemáticamente iguales, ¿verdad? Pues Java, con su `BigDecimal.equals()`, nos dice: ¡`false`! 🤯 Es como si tuvieras dos billetes de 10 euros, pero uno tiene un holograma más brillante y por eso Java decide que 'no son el mismo billete' en un sentido estricto. La clave está en la **escala** (scale). `BigDecimal.equals()` no solo compara el **valor numérico**, sino también la **escala** y la **representación interna**. `1.0` tiene escala 1, `1.00` tiene escala 2. Son distintos para `equals()` porque la representación cuenta. ✨ Si buscas la igualdad matemática pura, sin importar la escala, tu amigo es `compareTo()`. Cuando `value1.compareTo(value2) == 0`, ¡ahí sí que son iguales! Es como el árbitro que solo mira el valor real, sin importar el brillo del holograma. Así que, ¡ojo con los `BigDecimal` en tus cálculos financieros! 💰

Conceptos relacionados

BigDecimalequalityscale