我有BiGDecimal price,我需要检查它是否在某个范围内.例如应该是3个条件:
if (price >= 0 and price <=500) {
....
} else if (price >=500 && price <=1000) {
....
} else if (price > 1000) {
....
}
Run Code Online (Sandbox Code Playgroud)
如何使用BigDecimal类型正确执行.
And*_*rup 15
这可以使用.compareTo()方法实现.例如:
if ( price.compareTo( BigDecimal.valueOf( 500 ) > 0
&& price.compareTo( BigDecimal.valueOf( 1000 ) < 0 ) {
// price is larger than 500 and less than 1000
...
}
Run Code Online (Sandbox Code Playgroud)
从JavaDoc引用(和释义):
建议用于执行这些比较的习惯是:(x.compareTo(y)op 0),其中op是六个比较运算符之一[(<,==,>,> =,!=,<=)]
干杯,
小智 8
让我们通用:
public static <T extends Comparable<T>> boolean isBetween(T value, T start, T end) {
return value.compareTo(start) >= 0 && value.compareTo(end) <= 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为没有解决方法.最终你可以将它包装成一个漂亮的设计模式,但是BigDecimal只有一种比较方法.
我的想法是提取范围的方法:
boolean isBetween(BigDecimal price, BigDecimal start, BigDecimal end){
return price.compareTo(start) > 0 && price.compareTo(end) < 0;
}
Run Code Online (Sandbox Code Playgroud)
如果您已经使用 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));
}
Run Code Online (Sandbox Code Playgroud)