2010-11-12 18 views

risposta

282

È semplice come:

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

Il documentation for compareTo specifica realtà che restituisca -1, 0 o 1, ma il metodo più generale Comparable<T>.compareTo garantisce solo meno di zero, zero, o maggiore di zero per i tre casi appropriati, quindi di solito mi limito a questo confronto.

+43

una parola in più di avvertimento viene chiamato per. Supponiamo che "valore" abbia un valore pari a zero ma una scala diversa da zero (ad esempio, valuta "0.00" invece di "0"). Probabilmente vuoi considerare che è uguale a zero. Il metodo 'compareTo()' lo farà davvero. ** Ma il metodo 'equals()' non lo farà. ** (Un'altra prova, se ce ne fosse bisogno, che Loki o uno dei suoi avatar è vivo e vegeto e si è spostato nello sviluppo del software.) –

+4

Mentre sono d'accordo che questo è la soluzione idiomatica in Java, non penso che sia effettivamente leggibile. Ogni volta che incontro un'espressione come questa, mi ritrovo a scrivere un test per rassicurarmi sul fatto che ho capito bene. Forse il fatto che le classi aggiunte di recente, come 'LocalDate' includono [' isBefore'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#isAfter-java.time .chrono.ChronoLocalDate-) è un'indicazione che Oracle si sente allo stesso modo. Non è l'ideale, ma penso che sia marginalmente più leggibile in queste circostanze scrivere un metodo di utilità 'isGreaterThan'. –

10

Utilizzare la funzione compareTo() incorporata nella classe.

123

Possible better way:

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

BigDecimal.compareTo() inizia confrontando i Signum come un'ottimizzazione. Quindi è probabilmente meglio chiamare compareTo(), in quanto è più volutamente rivelatore e costa solo il prezzo di una chiamata al metodo extra (che, a mio avviso, sarebbe comunque in linea). –

+22

Questo fa parte dell'API pubblica. quindi è, per me, un modo migliore. l'intenzione è di determinare se il segno è positivo (cioè> ZERO) – Marc

+10

+ 1Best risposta di tutti in questo post. – Jabir

-1

Perché non può essere semplice come

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

Cosa succede se il tuo bigDecimalObject contiene i dati della stringa "abc" –

+0

Idealmente non facciamo il nuovo BigDecimal ("abc") sebbene non sia un problema di sintassi. getta java.lang.NumberFormatException durante l'esecuzione. se la puntura è assegnata, l'oggetto stesso non può essere usato correttamente. Non vediamo mai se un BigDecimal è una stringa prima di confrontarla. Anche la domanda non ha lo scopo di verificare la presenza di null, controllare la presenza di stringhe o controllare alcune altre cose :-) – Jajikanth

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

Perché questa risposta è migliore della risposta già accettata? – martijnn2008

+0

L'oggetto contiene stringa numarica, nella risposta accettata il valore non è dichiarato, potrebbe essere fonte di confusione. La mia risposta avrà più chiarezza. –

Problemi correlati