Vergleichen Sie, ob BigDecimal größer als Null ist

Lesezeit: 5 Minuten

Benutzer-Avatar
Santhosh

Wie kann ich vergleichen, ob BigDecimal Wert ist größer als Null?

  • 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 implementiert Comparable die Vergleichsfunktionen wie lt, le, eq, ne besser nach a verschoben werden ComparableUtils. Sie können also für beliebige andere Klassen verwendet werden Date 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


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 (z 0.00 Anstatt von 0). Sie möchten wahrscheinlich berücksichtigen, dass es gleich Null ist. Das compareTo() Methode wird dies tatsächlich tun. Aber die equals() 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 enthalten isBefore 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 schreiben isGreaterThan 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

Benutzer-Avatar
Anton Bessonow

Möglicher besserer Weg:

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 aufruft signum() 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

Benutzer-Avatar
duffymo

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

Benutzer-Avatar
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

Benutzer-Avatar
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

1359220cookie-checkVergleichen Sie, ob BigDecimal größer als Null ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy