2010-11-12 152 views

Respuesta

282

Es tan simple como:

if (value.compareTo(BigDecimal.ZERO) > 0) 

El documentation for compareTo realidad especifica que le proporcione -1, 0 o 1, pero el Comparable<T>.compareTo método más general sólo garantiza menor que cero, cero o mayor que cero para los tres casos apropiados, así que por lo general me limito a esa comparación.

+43

una palabra adicional de advertencia se pide. Supongamos que 'valor' tiene un valor de cero pero una escala distinta de cero (por ejemplo, evalúa a' 0.00' en lugar de '0'). Probablemente desee considerar que es igual a cero. El método 'compareTo()' hará esto. ** Pero el método 'igual()' no. ** (Otra prueba, si alguna fue necesaria, que Loki o uno de sus avatares está vivo y bien y se ha movido al desarrollo de software.) –

+4

Aunque estoy de acuerdo en que esto es la solución idiomática en Java, no creo que sea realmente legible. Cada vez que encuentro una expresión como esta, me encuentro escribiendo una prueba para asegurarme de que la tengo de la manera correcta. Quizás el hecho de que las clases agregadas recientemente, como 'LocalDate' incluya [' isBefore'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#isAfter-java.time .chrono.ChronoLocalDate-) es una indicación de que Oracle se siente de la misma manera. No es ideal, pero creo que es marginalmente más legible en estas circunstancias escribir un método 'isGreaterThan' de utilidad. –

10

Utilice compareTo() función que está incorporada en la clase.

123

Possible better way:

if (value.signum() > 0) 
+9

BigDecimal.compareTo() comienza comparando firmas como una optimización. Así que probablemente sea mejor llamar a compareTo(), ya que es más reveladora de intenciones y solo cuesta el precio de una llamada a un método adicional (que sospecho que se incluiría de todos modos). –

+22

Esto es parte de la API pública. por lo que es, para mí, una mejor manera. la intención ES determinar si el signo es positivo (es decir,> CERO) – Marc

+10

+ 1 Mejor respuesta que todos en esta publicación. – Jabir

-1

¿Por qué no puede ser tan simple como

if(bigDecimalObject.intValue() > 0) 
+0

¿Qué sucede si su bigDecimalObject contiene datos de la cadena "abc" –

+0

Lo ideal es que no hagamos un nuevo BigDecimal ("abc"), aunque no es un problema de sintaxis. arroja java.lang.NumberFormatException durante la ejecución. si se asigna la picadura, el objeto en sí no se puede usar correctamente. Nunca vemos si un BigDecimal es una cadena antes de compararlo. Además, la Pregunta no tiene como objetivo comprobar la nulidad, verificar si no hay cadena o verificar otras cosas :-) – Jajikanth

-1
BigDecimal obj = new BigDecimal("100"); 
if(obj.intValue()>0) 
    System.out.println("yes"); 
+0

¿Por qué esta respuesta es mejor que la respuesta ya aceptada? – martijnn2008

+0

El obj contiene cadena numaric, en la respuesta aceptada el valor no se declara, puede ser confuso. Mi respuesta tendrá más claridad. –

Cuestiones relacionadas