Ich habe eine Domain-Klasse mit unitPrice als BigDecimal-Datentyp festgelegt. Jetzt versuche ich eine Methode zu erstellen, um den Preis zu vergleichen, aber es scheint, als ob ich keine Vergleichsoperatoren im BigDecimal-Datentyp haben kann. Muss ich den Dateityp ändern oder gibt es einen anderen Weg?Verwendung von Vergleichsoperatoren wie>, =, <auf BigDecimal
Antwort
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 dann verglichen > 0
, == 0
oder < 0
je nachdem, was Sie brauchen. Lesen Sie die Dokumentation und Sie werden es herausfinden.
Die Betreiber ==
, <
, >
usw. können nur auf primitive Datentypen wie int
, long
, double
oder Klassen ihre Wrapper wie Integer
und Double
verwendet werden.
Aus der Dokumentation von compareTo
:
Vergleicht diese
BigDecimal
mit dem angegebenenBigDecimal
.Zwei
BigDecimal
Objekte, die im Wert gleich sind, haben aber eine andere Skala (wie 2,0 und 2.00) werden durch dieses Verfahren als gleich betrachtet. Diese Methode wird gegenüber einzelnen Methoden für jeden der sechs booleschen Vergleichsoperatoren bereitgestellt (<, ==,>,> =,! =, < =). Das vorgeschlagene Idiom für Durchführung dieser Vergleiche ist:(x.compareTo(y) <op> 0)
, wobei<op>
einer der sechs Vergleichsoperatoren ist.Rückgabe: -1, 0 oder 1, da BigDecimal numerisch kleiner, gleich oder größer als val ist.
Aber hilft die compareTo-Methode beim Finden, ob der Preis größer als, gleich oder niedriger als ist? – user3127109
Ja. Diese Information befindet sich in dem Link in der Antwort. –
@ user3127109 Ja, 'a.compareTo (b)' gibt eine Zahl größer als Null zurück, wenn 'a 'b', '0' wenn 'a == b', und kleiner als Null wenn 'a
die compareTo
Methode BigDecimal Verwendung:
public int compareTo (BigDecimal val) vergleicht diesen mit dem BigDecimal angegebenen BigDecimal.
Returns: -1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
BigDecimal
ist keine primitive, so dass Sie nicht die <
, >
Betreiber nutzen können. Da es sich jedoch um eine Comparable
handelt, können Sie die compareTo(BigDecimal)
mit demselben Effekt verwenden. Z.B .:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
Sie Methode compareTo
Namen verwenden können, x.compareTo(y)
. Es wird 0 zurückgeben, wenn x und y gleich sind, 1, wenn x größer als y und -1, wenn x kleiner als y
Um kurz:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="
Mit com.ibm.etools. Marshall.util.BigDecimalRange util Klasse von IBM kann man vergleichen, wenn BigDecimal im Bereich.
boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);
da 'BigDecimal' ein' Objekt' ist, funktioniert das nicht. Sie können jedoch einfach voneinander subtrahieren und prüfen, ob der resultierende Wert '<0', '== 0' oder '> 0' ist. Ansonsten könntest du den Standardweg mit den von [BigDecimal] bereitgestellten Methoden gehen (http://stackoverflow.com/questions/6787142/bigdecimal-equals-versus-compareto) – SomeJavaGuy
Deshalb gibt es eine 'compareTo' Methode die -1 zurückgibt , 0 oder 1. Was ist im Grunde das ["Comparable"] (https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html). –