Wie kann ich vergleichen, ob BigDecimal
Wert ist größer als Null?
Vergleichen Sie, ob BigDecimal größer als Null ist
Santhosh
Es ist so einfach wie:
if (value.compareTo(BigDecimal.ZERO) > 0)
Das Dokumentation für compareTo
gibt eigentlich an, dass -1, 0 oder 1 zurückgegeben wird, aber je allgemeiner Comparable<T>.compareTo
-Methode garantiert nur weniger als null, null oder größer als null für die entsprechenden drei Fälle – also bleibe ich normalerweise nur bei diesem Vergleich.
-
Ein zusätzliches Wort der Warnung ist angebracht. Nehme an, dass
value
hat einen Wert von Null, aber eine Skala ungleich Null (z0.00
Anstatt von0
). Sie möchten wahrscheinlich berücksichtigen, dass es gleich Null ist. DascompareTo()
Methode wird dies tatsächlich tun. Aber dieequals()
Methode nicht. (Ein weiterer Beweis, falls nötig, dass Loki oder einer seiner Avatare am Leben und wohlauf ist und in die Softwareentwicklung gewechselt ist.)– Andreas Spencer
6. Dezember 2011 um 11:16 Uhr
-
Obwohl ich zustimme, dass dies die idiomatische Lösung in Java ist, glaube ich nicht, dass sie tatsächlich lesbar ist. Jedes Mal, wenn ich auf einen Ausdruck wie diesen stoße, schreibe ich einen Test, um mich zu vergewissern, dass ich es richtig verstanden habe. Vielleicht die Tatsache, dass kürzlich hinzugefügte Klassen, wie
LocalDate
enthaltenisBefore
ist ein Hinweis darauf, dass Oracle genauso denkt. Es ist nicht ideal, aber ich denke, es ist unter diesen Umständen geringfügig besser lesbar, ein Dienstprogramm zu schreibenisGreaterThan
Methode.– Mark Slater
14. November 2016 um 11:27 Uhr
-
Funktioniert die @Jon Skeet-Lösung auch, wenn der Wert 0,00 oder 0,0 ist
– Angelina
29. März 2018 um 13:39 Uhr
-
@Angelina: Ich würde es sicherlich erwarten – diese Werte sind nicht größer als 0, also würde ich erwarten
compareTo
um 0 zurückzugeben. Aber wenn Sie sich Sorgen machen, sollte es für Sie einfach zu testen sein.– Jon Skeet
29. März 2018 um 13:40 Uhr
-
@MarkSlater Ich stimme zu, das CompareTo ist nur Java sollte mehr Zeit in die Verbesserung der Lesbarkeit investieren und es macht keinen Sinn, wenn jeder in jedem Projekt seine eigenen lesbaren Methoden erstellen muss. In C# können Sie auch Erweiterungsmethoden für vorhandene Klassen erstellen, sodass Sie `value.isGreaterThen(foo)“ direkt verwenden können
– DJM
26. Juni 2019 um 11:26 Uhr
Anton Bessonow
if (value.signum() > 0)
signum
gibt -1, 0 oder 1 zurück, wenn der Wert dieses BigDecimal negativ, null oder positiv ist.
-
BigDecimal.compareTo() beginnt mit dem Vergleich von Vorzeichen als Optimierung. Daher ist es wahrscheinlich am besten, “compareTo()” aufzurufen, da es die Absicht aufdeckt und nur den Preis eines zusätzlichen Methodenaufrufs kostet (von dem ich vermute, dass er ohnehin inline wird).
– Andreas Spencer
6. Dezember 2011 um 10:54 Uhr
-
Dies ist Teil der öffentlichen API. also ist es für mich ein besserer Weg. die Absicht IST zu bestimmen, ob das Vorzeichen positiv ist (dh > NULL)
– Markus
24. Januar 2012 um 13:56 Uhr
-
Wenn Sie sich dekompiliert ansehen
BigDecimal.compareTo()
-Methode, werden Sie feststellen, dass sie aufruftsignum()
zweimal. Also was die Leistung angeht,signum()
ist besser.– Meir
5. Juni 2017 um 14:34 Uhr
-
Was war Ihr Problem mit Dezimalfällen? @jfajunior
– Ismail Yavuz
30. April 2020 um 10:28 Uhr
-
@İsmailYavuz Es tut mir leid für den unvollständigen Kommentar! Ich sollte zumindest einen Beweis für die Argumente schreiben, mein Fehler. Jetzt habe ich gesucht, was passiert ist, weil ich mich erinnere, dass ich Dinge von “signum” auf “compareTo” ändern musste und keine Ahnung habe, warum. Es war wahrscheinlich mein Fehler, da ich jetzt mehrere Tests durchgeführt habe und keine Probleme mit dem “Signum” bei Zahlen mit Dezimalstellen gefunden habe.
– jfajunior
12. Mai 2020 um 7:41 Uhr
duffymo
Verwenden compareTo()
Funktion, die in die Klasse integriert ist.
yOshi
Es ist sicherer, die Methode zu verwenden compareTo()
BigDecimal a = new BigDecimal(10);
BigDecimal b = BigDecimal.ZERO;
System.out.println(" result ==> " + a.compareTo(b));
Konsole drucken
result ==> 1
compareTo()
kehrt zurück
- 1 wenn a größer als b ist
- -1 wenn a kleiner als b ist
- 0 wenn a gleich b ist
jetzt für Ihr Problem können Sie verwenden
if (value.compareTo(BigDecimal.ZERO) > 0)
oder
if (value.compareTo(new BigDecimal(0)) > 0)
Ich hoffe, es hat dir geholfen.
Die Verwendung von “.intValue()” für das BigDecimal-Objekt ist nicht richtig, wenn Sie überprüfen möchten, ob es größer als Null ist. Die einzige verbleibende Option ist die Methode “.compareTo()”.
Das funktioniert ein Kotlin:
Wert > BigDecimal.ZERO
Rama Krishna
BigDecimal obj = new BigDecimal("100");
if(obj.intValue()>0)
System.out.println("yes");
-
Das obj enthält eine numerische Zeichenfolge. In der akzeptierten Antwort wird der Wert nicht deklariert, was verwirrend sein kann. Meine Antwort wird mehr Klarheit haben.
– Rama Krishna
19. Februar 2018 um 11:43 Uhr
-
Es ist für jeden Wert, niemand wird basierend auf Eingaben für diese einfachen Dinge stimmen, es kann für komplexe Szenarien hilfreich sein. Sie konvertieren wieder in Intvalue. Die Konvertierung kostet also, und dies wird für 0,33 fehlschlagen, da es in int 0 konvertiert wird
– Satish Patro
26. August 2020 um 14:35 Uhr
-
@RamaKrishna, was wäre, wenn mein obj =
BigDecimal("0.01")
? Würde es “ja” drucken?– Epoxid
12. August um 12:14 Uhr
Einblick in github.com/mortezaadi/bigdecimal-utils es gibt eine Methode isPositive() es gibt auch wie is(bigdecimal).isZero(); is(bigdecimal).notZero(); ist(bigdecimal).isPositive(); // größer als Null is(bigdecimal).isNegative(); // kleiner als Null is(bigdecimal).isNonPositive(); // kleiner oder gleich Null is(bigdecimal).isNonNegative();
– Morteza Adi
30. September 2018 um 11:47 Uhr
@MortezaAdi seit
BigDecimal
implementiertComparable
die Vergleichsfunktionen wielt, le, eq, ne
besser nach a verschoben werdenComparableUtils
. Sie können also für beliebige andere Klassen verwendet werdenDate
oder benutzerdefinierte Typen.– DJM
26. Juni 2019 um 11:23 Uhr
@djmj-Anforderungen definieren die Implementierung, es gab weder die Notwendigkeit noch die Absicht, ComparableUtils zu erstellen. Abgesehen davon sind die Funktionen von lt, le, eq usw. völlig anders als die generischen.
– Morteza Adi
27. Juni 2019 um 12:09 Uhr