operator - compare bigdecimal to int java
BigDecimal es igual a() que compare a() (3)
Considere la clase de prueba simple:
import java.math.BigDecimal;
/**
* @author The Elite Gentleman
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal x = new BigDecimal("1");
BigDecimal y = new BigDecimal("1.00");
System.out.println(x.equals(y));
System.out.println(x.compareTo(y) == 0 ? "true": "false");
}
}
Puedes decir (conscientemente) que x
es igual a y
(no referencia de objeto), pero cuando ejecutas el programa, el siguiente resultado muestra:
false
true
Pregunta: ¿Cuál es la diferencia entre compareTo()
y equals()
en BigDecimal
que compareTo
puede determinar que x
es igual a y
?
PD: veo que BigDecimal tiene un método inflate inflate()
método equals()
. ¿Qué hace inflate()
realidad?
Veo que BigDecimal tiene un método inflate () en el método equals (). ¿Qué hace inflar () en realidad?
Básicamente, inflate()
llama a BigInteger.valueOf(intCompact)
si es necesario, es decir, crea el valor sin long intCompact
almacenado como BigInteger
desde long intCompact
. Si no necesita ese BigInteger
y el valor sin escalar cabe en un BigDecimal
long
parece tratar de ahorrar espacio el mayor tiempo posible.
La respuesta está en el método JavaDoc del método equals()
:
A diferencia de
compareTo
, este método considera dos objetosBigDecimal
iguales solo si son iguales en valor y escala (por lo tanto, 2.0 no es igual a 2.00 cuando se compara con este método).
En otras palabras: equals()
comprueba si los objetos BigDecimal
son exactamente iguales en todos los aspectos. compareTo()
"solo" compara su valor numérico.
También puedes comparar con doble valor
BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1");
System.out.println(a.doubleValue()==b.doubleValue());