Wie kann ich vergleichen, wenn BigDecimal
Wert größer als Null ist?vergleichen, wenn BigDecimal größer als Null ist
Antwort
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.
Verwenden compareTo()
Funktion, die in die Klasse integriert ist.
if (value.signum() > 0)
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). –
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
+ 1ste Antwort als alle in diesem Beitrag. – Jabir
Warum es nicht so einfach wie
if(bigDecimalObject.intValue() > 0)
was, wenn Ihr bigDecimalObject ist hält Daten der Zeichenfolge „abc“ –
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
BigDecimal obj = new BigDecimal("100");
if(obj.intValue()>0)
System.out.println("yes");
Warum ist diese Antwort besser als die bereits akzeptierte Antwort? – martijnn2008
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. –
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.) –
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. –