如何使用比较运算符,如>,=,<在BigDecimal上

时间:2016-01-08 12:55:01

标签: java spring operator-keyword bigdecimal

我有一个domainPrice设置为BigDecimal数据类型的域类。现在我正在尝试创建一个比较价格的方法,但似乎我不能在BigDecimal数据类型中有比较运算符。我是否必须更改数据类型或是否有其他方法?

8 个答案:

答案 0 :(得分:83)

BigDecimal的每个对象都有一个方法compareTo,您可以使用该方法将其与另一个BigDecimal进行比较。然后将compareTo的结果与> 0== 0< 0进行比较,具体取决于您的需求。阅读文档,你会发现。

运营商==<>等只能用于原始数据类型,例如intlong,{{1}或者他们的包装类,如doubleInteger

来自Double的文档:

  

将此compareTo与指定的BigDecimal进行比较。

     

两个BigDecimal   值相等但具有不同比例的对象(如2.0   通过这种方法被认为是相同的。提供了该方法   优先于六个布尔值中的每一个的单独方法   比较运算符(&lt;,==,&gt;,&gt; =,!=,&lt; =)。建议的成语   执行这些比较的是:BigDecimal,其中(x.compareTo(y) <op> 0)   是六个比较运算符之一。

     

返回:   -1,0或1,因为此BigDecimal在数值上小于,等于或大于val。

答案 1 :(得分:67)

简短:

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

答案 2 :(得分:19)

使用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.

答案 3 :(得分:9)

您可以使用名为compareTox.compareTo(y)的方法。如果x和y相等则返回0,如果x大于y则返回1,如果x小于y则返回-1

答案 4 :(得分:5)

BigDecimal不是原始的,因此您无法使用<>运算符。但是,由于它是Comparable,您可以使用compareTo(BigDecimal)来达到同样的效果。 E.g:

public class Domain {
    private BigDecimal unitPrice;

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

    // etc...
}

答案 5 :(得分:0)

使用IBM的 com.ibm.etools.marshall.util.BigDecimalRange util类可以比较范围内的 BigDecimal

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

答案 6 :(得分:0)

以下是所有六个布尔比较运算符(<,==,>,> =,!=,<=)的示例:

recyclerView.loadItemsBeforeTheyBecomeVisible(int numberOfLoadingItem);

答案 7 :(得分:0)

此线程有很多答案,指出BigDecimal.compareTo(BigDecimal)方法是用于比较BigDecimal实例的方法。我只是想补充一下没有使用BigDecimal.compareTo(BigDecimal)方法的经验,在比较BigDecimal实例时要小心考虑规模。因此,例如...

  • new BigDecimal(0.8)将创建一个BigDecimal实例,其值不是恰好是0.8,并且比例为50 +,
  • new BigDecimal("0.8")将创建一个BigDecimal实例,其值恰好是0.8,其标度为1

...,根据BigDecimal.compareTo(BigDecimal)方法,这两个将被认为是不相等的,因为当小数位数不限于小数位时,它们的值是不相等的。

首先,您应该小心使用BigDecimal构造函数创建BigDecimal(String val)实例。其次,如果不可能,则可以通过BigDecimal方法限制BigDecimal.setScale(int newScale, RoundingMode roundingMode)实例的规模,然后再进行比较。