我有BiGDecimal price
,我需要检查它是否在某个范围内。
例如,应该是3个条件:
if (price >= 0 and price <=500) {
....
} else if (price >=500 && price <=1000) {
....
} else if (price > 1000) {
....
}
如何使用BigDecimal类型正确执行。
答案 0 :(得分:14)
使用.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) op 0),其中 op < / strong>是六个比较运算符之一 [(&lt;,==,&gt;,&gt; =,!=,&lt; =)]
干杯,
答案 1 :(得分:7)
我认为没有解决方法。最终你可以将它包装成一个漂亮的设计模式,但是BigDecimal只有一种比较方法。
我的想法是提取范围的方法:
boolean isBetween(BigDecimal price, BigDecimal start, BigDecimal end){
return price.compareTo(start) > 0 && price.compareTo(end) < 0;
}
答案 2 :(得分:7)
让我们通用:
public static <T extends Comparable<T>> boolean isBetween(T value, T start, T end) {
return value.compareTo(start) >= 0 && value.compareTo(end) <= 0;
}
答案 3 :(得分:1)
使用BigDecimal.compareTo(val)
来比较您的号码是更大,更小还是相等。
返回-1,0或1,因为此BigDecimal在数值上小于,等于或大于val。
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) {
....
}
答案 4 :(得分:1)
使用compareTo方法
java.math.BigDecimal.compareTo(BigDecimal val)
如果BigDecimal小于val,则此方法返回-1;如果BigDecimal大于val,则此方法返回1;如果BigDecimal等于val,则此方法返回0
答案 5 :(得分:1)
你可以这样做;
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
答案 6 :(得分:1)
如果您已经在使用Apache commons lang,则一种选择是使用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));
}
答案 7 :(得分:1)
BigDecimal value = BigDecimal.valueOf(2);
BigDecimal zero = BigDecimal.valueOf(0);
BigDecimal one = BigDecimal.valueOf(1);
// When it is greater than 0 it returns 1 or if it is equal to 0 it returns 0
System.out.println(value.compareTo(BigDecimal.ZERO)>=0);
// When it is greater than 1 it returns -1 or if it is equal to 1 it returns 0
System.out.println(value.compareTo(BigDecimal.ONE)<=0);
boolean condition = value.compareTo(BigDecimal.ZERO) >= 0 && value.compareTo(BigDecimal.ONE) <= 0;
System.out.println(condition);
答案 8 :(得分:0)
使用BigDecimal类中的signum方法:
private static boolean isBetween(BigDecimal amount, BigDecimal init, BigDecimal end) {
return amount.subtract(init).signum() >= 0 && amount.subtract(end).signum() <= 0;
}
答案 9 :(得分:0)
正如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变量将属于该区间。