2010-11-12 7 views

Antwort

282

Es ist so einfach wie:

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

Die documentation for compareTo gibt eigentlich, dass es -1 zurück, 0 oder 1, aber die allgemeinere Comparable<T>.compareTo Methode garantiert nur kleiner als Null, Null oder größer als Null ist für die passenden drei Fälle - so bleibe ich typischerweise bei diesem Vergleich.

+43

Ein zusätzliches Wort der Warnung für aufgerufen werden kann. Angenommen, "Wert" hat einen Wert von Null, aber einen von Null verschiedenen Maßstab (z. B. wird er mit "0,00" anstelle von "0" bewertet). Sie möchten wahrscheinlich berücksichtigen, dass es gleich null ist. Die 'compareTo()' Methode wird dies tatsächlich tun. ** Aber die 'equals()' Methode nicht. ** (Ein weiterer Beweis, wenn überhaupt nötig waren, dass Loki oder einer seiner Avatare ist lebendig und gut und hat sich in der Software-Entwicklung verschoben.) –

+4

Während ich zustimme, dass dies die idiomatische Lösung in Java, ich glaube nicht, dass es tatsächlich lesbar ist. Jedes Mal, wenn ich auf einen solchen Ausdruck stoße, muss ich einen Test schreiben, um mich zu beruhigen, dass ich den richtigen Weg gefunden habe. Vielleicht ist die Tatsache, dass vor kurzen Klassen hinzugefügt, wie 'LocalDate' umfasst [' isBefore'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#isAfter-java.time .chrono.ChronoLocalDate-) ist ein Hinweis darauf, dass Oracle genauso empfindet. Es ist nicht ideal, aber ich denke, unter diesen Umständen ist es etwas besser lesbar, ein Dienstprogramm "isGreaterThan" zu schreiben. –

10

Verwenden compareTo() Funktion, die in die Klasse integriert ist.

123

Possible better way:

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

BigDecimal.compareTo() beginnt mit dem Vergleich von Signums als Optimierung. Daher ist es wahrscheinlich am besten, compareTo() aufzurufen, da es eher aufschlussreich ist und nur den Preis eines zusätzlichen Methodenaufrufs kostet (von dem ich annehme, dass er sowieso inline wird). –

+22

Dies ist Teil der öffentlichen API. also ist es für mich ein besserer Weg. Die Absicht IST zu bestimmen, ob das Zeichen positiv ist (dh> NULL) – Marc

+10

+ 1ste Antwort als alle in diesem Beitrag. – Jabir

-1

Warum es nicht so einfach wie

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

was, wenn Ihr bigDecimalObject ist hält Daten der Zeichenfolge „abc“ –

+0

Idealer Problem, das wir nicht tun, neue BigDecimal („abc“), obwohl seine nicht eine Syntax. Es löst java.lang.NumberFormatException während der Ausführung aus. Wenn der Stich zugewiesen ist, kann das Objekt selbst nicht richtig verwendet werden. Wir sehen nie, ob ein BigDecimal String ist, bevor wir ihn vergleichen. Die Frage ist auch nicht dafür gedacht nach Null zu suchen, nach Zeichenketten zu suchen oder nach anderen Dingen zu suchen :-) – Jajikanth

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

Warum ist diese Antwort besser als die bereits akzeptierte Antwort? – martijnn2008

+0

Das Obj enthält Numaric String, in der akzeptierten Antwort der Wert nicht deklariert ist, könnte verwirrend sein. Meine Antwort wird mehr Klarheit haben. –