Ich habe den folgenden Code in Java;
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
Wie kann ich die if-Bedingung am besten schreiben?
Verwenden Sie compareTo(BigDecimal.ZERO)
anstelle von equals()
:
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
Der Vergleich mit der BigDecimal
Konstante BigDecimal.ZERO
verhindert, dass bei jeder Ausführung ein neues BigDecimal(0)
konstruiert werden muss.
Zu Ihrer Information: BigDecimal
hat auch Konstanten BigDecimal.ONE
und BigDecimal.TEN
für Ihre Bequemlichkeit.
Der Grund, warum Sie BigDecimal#equals()
nicht verwenden können, ist, dass es Skala berücksichtigt:
new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!
und ist daher für einen rein numerischen Vergleich ungeeignet. Allerdings berücksichtigt BigDecimal.compareTo()
die Skala beim Vergleich nicht:
new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true
Es gibt eine Konstante, gegen die Sie prüfen können:
someBigDecimal.compareTo(BigDecimal.ZERO) == 0