检查BigDecimal值是否在范围内

use*_*896 9 java bigdecimal

我有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)


Ber*_*eri 7

我认为没有解决方法.最终你可以将它包装成一个漂亮的设计模式,但是BigDecimal只有一种比较方法.

我的想法是提取范围的方法:

boolean isBetween(BigDecimal price, BigDecimal start, BigDecimal end){
  return price.compareTo(start) > 0 && price.compareTo(end) < 0;
}
Run Code Online (Sandbox Code Playgroud)


bea*_*eat 5

如果您已经使用 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)