unitPriceがBigDecimalデータ型として設定されたドメインクラスがあります。現在、価格を比較するメソッドを作成しようとしていますが、BigDecimalデータ型に比較演算子を含めることができないようです。データ型を変更する必要がありますか、それとも他の方法がありますか?
compareTo、-1、0、または1を返すメソッドがあります。これは基本的にComparableです。
unitPriceがBigDecimalデータ型として設定されたドメインクラスがあります。現在、価格を比較するメソッドを作成しようとしていますが、BigDecimalデータ型に比較演算子を含めることができないようです。データ型を変更する必要がありますか、それとも他の方法がありますか?
compareTo、-1、0、または1を返すメソッドがあります。これは基本的にComparableです。
回答:
クラスのすべてのオブジェクトには、別のBigDecimalと比較するために使用できるBigDecimalメソッドがありcompareToます。結果はcompareTo、その後比較され> 0、== 0または< 0何が必要に応じて。ドキュメントを読んでください。
事業者は==、<、>などだけのようなプリミティブデータ型に使用することができint、long、doubleそのラッパのようなクラスやIntegerとDouble。
のドキュメントからcompareTo:
これ
BigDecimalを指定されBigDecimalたと比較します。
BigDecimal値は等しいがスケールが異なる2つのオブジェクト(2.0と2.00など)は、このメソッドによって等しいと見なされます。このメソッドは、6つのブール比較演算子(<、==、>、> =、!=、<=)の個々のメソッドに優先して提供されます。これらの比較を実行するための提案イディオムである:(x.compareTo(y) <op> 0)ここで、<op>6つの比較演算子の一つです。戻り値:このBigDecimalは、数値的にvalより小さい、等しい、または大きいため、-1、0、または1。
a.compareTo(b)場合はゼロよりも大きい数値を返しa > b、の0場合a == bはゼロ未満の数値を返しますa < b。
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
BigDecimalあなたが使用することはできませんので、原始的ではない<、>演算子を。ただし、なのでComparable、を使用compareTo(BigDecimal)して同じ効果を得ることができます。例えば:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
このスレッドには、BigDecimal.compareTo(BigDecimal)メソッドがBigDecimalインスタンスを比較するために使用するメソッドであることを示す多くの回答があります。BigDecimal.compareTo(BigDecimal)メソッドを使用した経験がなくなったため、BigDecimalインスタンスの作成方法に注意するために追加したかっただけです。したがって、たとえば...
new BigDecimal(0.8)正確BigDecimalではない値を持つインスタンスを作成します0.8、50 +のスケールを持つ。new BigDecimal("0.8")作成されるBigDecimal値でインスタンスであり、正確に0.81のスケールを有します...そして2つはBigDecimal.compareTo(BigDecimal)に従って不等であると見なされますスケールが小数点以下の桁数に制限されていない場合、値は等しくないためメソッドに。
まずBigDecimal、BigDecimal(String val)コンストラクターBigDecimal.valueOf(double val)ではなくコンストラクターまたはメソッドを使用してインスタンスを作成するように注意してくださいBigDecimal(double val)。次に、BigDecimal.setScale(int newScale、RoundingMode roundingMode)メソッドを使用して、比較する前にBigDecimalインスタンスのスケールを制限できることに注意してください。
BigDecimalあるObject、ないこのdoesn't作品。しかし、単純に互いに1を引いて、結果の値が<0である==0かどうかを確認することもできます>0。それ以外の場合は、BigDecimal