web-dev-qa-db-ja.com

BigDecimalで>、=、<などの比較演算子を使用する方法

BigDecimalデータ型としてunitPriceが設定されたドメインクラスがあります。今私は価格を比較するためのメソッドを作成しようとしていますが、BigDecimalデータ型では比較演算子を持つことができないようです。データ型を変更する必要がありますか、それとも他の方法がありますか?

76
user3127109

クラスBigDecimalのすべてのオブジェクトには、 compareTo というメソッドがあり、他のBigDecimalと比較することができます。 compareToの結果は、必要に応じて> 0== 0または< 0と比較されます。ドキュメントを読むとわかるでしょう。

演算子==<>などは、intlongdoubleなどのプリミティブデータ型、またはIntegerおよびDoubleなどのラッパークラスでのみ使用できます。

compareToのドキュメントから:

このBigDecimalと指定されたBigDecimalを比較します。

このメソッドでは、値は同じだがスケールが異なる2つのBigDecimalオブジェクトが等しいと見なされます。このメソッドは、6つのブール比較演算子(<、==、>、> =、!=、<=)のそれぞれについて、個別のメソッドよりも優先して提供されます。これらの比較を実行するための推奨イディオムは(x.compareTo(y) <op> 0)です。ここで<op>は6つの比較演算子のうちの1つです。

戻り値:このBigDecimalが数値的にvalよりも小さい、等しい、または大きいため、-1、0、または1。

88
Simulant

短くするには:

firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"    
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="  
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="    
76
torina

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.
19
Arnaud

compareTox.compareTo(y)という名前のメソッドを使用できます。 xとyが等しい場合は0、xがyより大きい場合は1、xがyより小さい場合は-1を返します。

9
Agung Setiawan

BigDecimal はプリミティブではないので、<>演算子は使用できません。ただし、 Comparable なので、同じ効果を得るために compareTo(BigDecimal) を使用できます。例えば。:

public class Domain {
    private BigDecimal unitPrice;

    public boolean isCheaperThan(BigDecimal other) {
        return unitPirce.compareTo(other.unitPrice) < 0;
    }

    // etc...
}
5
Mureinik

これは、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
1
ognjenkl

IBMのcom.ibm.etools.marshall.util.BigDecimalRange utilクラスを使用すると、BigDecimalの範囲で比較することができます。

boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);
0
Alexey