私が持っています BiGDecimal price
そして私はそれが何らかの範囲内にあるかどうかを確認する必要があります。たとえば、次の3つの条件が必要です。
if (price >= 0 and price <=500) {
....
} else if (price >=500 && price <=1000) {
....
} else if (price > 1000) {
....
}
BigDecimalタイプを使用してそれを正しく行う方法。
これは、 。compareTo() メソッドを使用して実現できます。例えば:
if ( price.compareTo( BigDecimal.valueOf( 500 ) > 0
&& price.compareTo( BigDecimal.valueOf( 1000 ) < 0 ) {
// price is larger than 500 and less than 1000
...
}
JavaDocからの引用(および言い換え):
これらの比較を実行するための推奨イディオムは次のとおりです。(x.compareTo(y)op0)、ここで、opは、6つの比較演算子[(<、 ==、>、> =、!=、<=)]
乾杯、
それを一般的にしましょう:
public static <T extends Comparable<T>> boolean isBetween(T value, T start, T end) {
return value.compareTo(start) >= 0 && value.compareTo(end) <= 0;
}
これに対する回避策はないと思います。最終的にはそれをNiceデザインパターンにラップすることができますが、BigDecimalには比較する方法が1つしかありません。
私の考えは、範囲のメソッドを抽出することです。
boolean isBetween(BigDecimal price, BigDecimal start, BigDecimal end){
return price.compareTo(start) > 0 && price.compareTo(end) < 0;
}
すでにApachecommons langを使用している場合、1つのオプションは、独自のユーティリティメソッドを作成する代わりに、 Range クラスを使用することです。
@Test
public void bigDecimalInRange() {
Range<BigDecimal> myRange = Range.between(BigDecimal.TEN, BigDecimal.valueOf(300));
BigDecimal tooSmallAmount = new BigDecimal("2.50");
assertFalse(myRange.contains(tooSmallAmount));
BigDecimal rightAmount = new BigDecimal("10.01");
assertTrue(myRange.contains(rightAmount));
}
BigDecimal.compareTo(val)
を使用して、数値が大きいか小さいか、等しいかを比較します。
このBigDecimalは数値的にvalより小さい、等しい、または大きいため、-1、0、または1を返します。
if (price.compareTo(BigDecimal.ZERO) >= 0 &&
price.compareTo(new BigDecimal(500)) <= 0) {
....
} else if (price.compareTo(new BigDecimal(500)) >= 0 &&
price.compareTo(new BigDecimal(1000)) <= 0) {
....
} else if (price.compareTo(price.compareTo(new BigDecimal(1000)) < 0) {
....
}
compareToメソッドを使用する
Java.math.BigDecimal.compareTo(BigDecimal val)
このメソッドは、BigDecimalがvalより小さい場合は-1を返し、BigDecimalがvalより大きい場合は1を返し、BigDecimalがvalに等しい場合は0を返します。
このようにsthgを実行できます。
public class BigDecimalDemo {
public static void main(String[] args) {
// create 2 BigDecimal objects
BigDecimal bg1, bg2;
bg1 = new BigDecimal("10");
bg2 = new BigDecimal("20");
//create int object
int res;
res = bg1.compareTo(bg2); // compare bg1 with bg2
String str1 = "Both values are equal ";
String str2 = "First Value is greater ";
String str3 = "Second value is greater";
if( res == 0 )
System.out.println( str1 );
else if( res == 1 )
System.out.println( str2 );
else if( res == -1 )
System.out.println( str3 );
}
}
リソース: http://www.tutorialspoint.com/Java/math/bigdecimal_compareto.htm
Kirill Karandinが言ったように、一般的なメソッドを書くことができます。
public static <T extends Comparable<T>> boolean isBetween(T x, T lowerBound, T upperBound) {
return (x.compareTo(lowerBound) + upperBound.compareTo(x)) > 0;
}
違いは、内部合計が返されることです。
したがって、合計が0より大きい(または単に0に等しくない)場合、x変数は区間に属します。
BigDecimalクラスのsignumメソッドを使用します。
private static boolean isBetween(BigDecimal amount, BigDecimal init, BigDecimal end) {
return amount.subtract(init).signum() >= 0 && amount.subtract(end).signum() <= 0;
}