2012-03-18 33 views
8

¿Cuál es la mejor forma de comparar un BigDecimal y un int en Java: convertir BigDecimal en int o convertir int en BigDecimal?Comparación de BigDecimal e int en Java

+0

Si convierte el BigDecimal a int, es probable que exceda su rango. –

Respuesta

9

Si usted espera que el valor BigDecimal a ser muy grande (es decir, fuera del rango de valores int, que es -2 a 2 -1) y/o para contener dígitos decimales, o simplemente quiere juega seguro, debes convertir el int en BigDecimal para evitar errores de desbordamiento/truncamiento.

De lo contrario, si el rendimiento es un problema realmente grande (que es raro), podría ser mejor al revés.

+1

¡Eso es exactamente lo que quería saber! Gracias @peter! – HighBit

0

Una razón para no convertir int a BigDecimal es el hecho de que crearía un objeto nuevo, por lo tanto, realmente está tirando basura en su montón para realizar la igualdad. Además, la igualdad primitiva sería más rápida que la del objeto BigInteger real también.

+0

¿Por qué sería esto "tirar basura en el montón"? –

+0

pero esto podría provocar un desbordamiento y el resultado podría ser incorrecto. Si BigDecimal bd = maxint +1 y bd se convierten a int, el resultado será 1 – nist

+0

Claro, depende del uso real de Case. @Oli cada vez para el caso de comparación crearía un nuevo objeto BigInteger, que podría no ser necesario y que reside en el montón, en lugar de tomar el valor primitivo real ya almacenado dentro del objeto BigInt – Bober02

2

Quiere convertir el int en un BigDecimal.

Esto se debe a que no siempre podrá convertir un BigDecimal en un int; Perderá información después del punto decimal y el valor de BigDecimal podría estar fuera del rango de un int.

1

Como BigDecimal amplía la gama de int que tendrá que convertir el int en BigDecimal para asegurarse de que se pueden comparar, de todos modos.