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