Ich habe eine Domänenklasse, in der unitPrice als BigDecimal-Datentyp festgelegt ist. Jetzt versuche ich, eine Methode zu erstellen, um den Preis zu vergleichen, aber es scheint, als könnte ich keine Vergleichsoperatoren im BigDecimal-Datentyp haben. Muss ich den Datentyp ändern oder gibt es einen anderen Weg?
Jedes Objekt der Klasse BigDecimal
hat eine Methode compareTo
, die Sie verwenden können, um es mit einem anderen BigDecimal zu vergleichen. Das Ergebnis von compareTo
wird je nach Bedarf > 0
, == 0
oder < 0
verglichen. Lesen Sie die Dokumentation und Sie werden es herausfinden.
Die Operatoren ==
, <
, >
usw. können nur für primitive Datentypen wie int
, long
, double
oder deren Wrapper-Klassen wie Integer
und Double
verwendet werden.
Aus der Dokumentation von compareTo
:
Vergleicht diese
BigDecimal
mit der angegebenenBigDecimal
.Zwei
BigDecimal
Objekte, deren Wert gleich ist, aber eine andere Skalierung haben (wie 2.0 und 2.00), werden von dieser Methode als gleich betrachtet. Diese Methode wird bereitgestellt den individuellen Methoden für jeden der sechs Booleschen .__ vorziehen. Vergleichsoperatoren (<, ==,>,> =,! =, <=). Das vorgeschlagene Idiom für Die Durchführung dieser Vergleiche ist:(x.compareTo(y) <op> 0)
, wobei<op>
ist einer der sechs Vergleichsoperatoren.Kehrt zurück: -1, 0 oder 1, da dieses BigDecimal numerisch kleiner als, gleich oder größer als Wert ist.
Um es kurz zu fassen:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="
Verwenden Sie die compareTo
- Methode von BigDecimal:
public int compareTo (BigDecimal-Wert) Vergleicht diesen BigDecimal-Wert mit dem angegebenes BigDecimal.
Returns: -1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
Sie können die Methode compareTo
, x.compareTo(y)
verwenden. Es wird 0 zurückgegeben, wenn x und y gleich sind, 1, wenn x größer als y ist, und -1, wenn x kleiner als y ist
BigDecimal
ist keine Grundform, daher können Sie die Operatoren <
, >
nicht verwenden. Da es sich um eine Comparable
handelt, können Sie die compareTo(BigDecimal)
zu demselben Effekt verwenden. Z.B.:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
Hier ist ein Beispiel für alle sechs booleschen Vergleichsoperatoren (<, ==,>,> =,! =, <=):
BigDecimal big10 = new BigDecimal(10);
BigDecimal big20 = new BigDecimal(20);
System.out.println(big10.compareTo(big20) < -1); // false
System.out.println(big10.compareTo(big20) <= -1); // true
System.out.println(big10.compareTo(big20) == -1); // true
System.out.println(big10.compareTo(big20) >= -1); // true
System.out.println(big10.compareTo(big20) > -1); // false
System.out.println(big10.compareTo(big20) != -1); // false
System.out.println(big10.compareTo(big20) < 0); // true
System.out.println(big10.compareTo(big20) <= 0); // true
System.out.println(big10.compareTo(big20) == 0); // false
System.out.println(big10.compareTo(big20) >= 0); // false
System.out.println(big10.compareTo(big20) > 0); // false
System.out.println(big10.compareTo(big20) != 0); // true
System.out.println(big10.compareTo(big20) < 1); // true
System.out.println(big10.compareTo(big20) <= 1); // true
System.out.println(big10.compareTo(big20) == 1); // false
System.out.println(big10.compareTo(big20) >= 1); // false
System.out.println(big10.compareTo(big20) > 1); // false
System.out.println(big10.compareTo(big20) != 1); // true
Mit der com.ibm.etools.marshall.util.BigDecimalRange util-Klasse von IBM kann man vergleichen, ob BigDecimal im Bereich liegt.
boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);