Come posso confrontare se il valore BigDecimal
è maggiore di zero?Confronto se BigDecimal è maggiore di zero
risposta
È 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.
Utilizzare la funzione compareTo()
incorporata nella classe.
if (value.signum() > 0)
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). –
Questo fa parte dell'API pubblica. quindi è, per me, un modo migliore. l'intenzione è di determinare se il segno è positivo (cioè> ZERO) – Marc
+ 1Best risposta di tutti in questo post. – Jabir
Perché non può essere semplice come
if(bigDecimalObject.intValue() > 0)
Cosa succede se il tuo bigDecimalObject contiene i dati della stringa "abc" –
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
BigDecimal obj = new BigDecimal("100");
if(obj.intValue()>0)
System.out.println("yes");
Perché questa risposta è migliore della risposta già accettata? – martijnn2008
L'oggetto contiene stringa numarica, nella risposta accettata il valore non è dichiarato, potrebbe essere fonte di confusione. La mia risposta avrà più chiarezza. –
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.) –
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'. –