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.8
1のスケールを有します...そして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