BigDecimalデータ型としてunitPriceが設定されたドメインクラスがあります。今私は価格を比較するためのメソッドを作成しようとしていますが、BigDecimalデータ型では比較演算子を持つことができないようです。データ型を変更する必要がありますか、それとも他の方法がありますか?
クラスBigDecimal
のすべてのオブジェクトには、 compareTo
というメソッドがあり、他のBigDecimalと比較することができます。 compareTo
の結果は、必要に応じて> 0
、== 0
または< 0
と比較されます。ドキュメントを読むとわかるでしょう。
演算子==
、<
、>
などは、int
、long
、double
などのプリミティブデータ型、またはInteger
およびDouble
などのラッパークラスでのみ使用できます。
compareTo
のドキュメントから:
この
BigDecimal
と指定されたBigDecimal
を比較します。このメソッドでは、値は同じだがスケールが異なる2つの
BigDecimal
オブジェクトが等しいと見なされます。このメソッドは、6つのブール比較演算子(<、==、>、> =、!=、<=)のそれぞれについて、個別のメソッドよりも優先して提供されます。これらの比較を実行するための推奨イディオムは(x.compareTo(y) <op> 0)
です。ここで<op>
は6つの比較演算子のうちの1つです。戻り値:このBigDecimalが数値的にvalよりも小さい、等しい、または大きいため、-1、0、または1。
短くするには:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="
BigDecimalの compareTo
メソッドを使用します。
public int compareTo(BigDecimal val)このBigDecimalと指定されたBigDecimalを比較します。
Returns: -1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
compareTo
、x.compareTo(y)
という名前のメソッドを使用できます。 xとyが等しい場合は0、xがyより大きい場合は1、xがyより小さい場合は-1を返します。
BigDecimal
はプリミティブではないので、<
、>
演算子は使用できません。ただし、 Comparable
なので、同じ効果を得るために compareTo(BigDecimal)
を使用できます。例えば。:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
これは、6つのブール比較演算子(<、==、>、> =、!=、<=)すべての例です。
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
IBMのcom.ibm.etools.marshall.util.BigDecimalRange utilクラスを使用すると、BigDecimalの範囲で比較することができます。
boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);