我有一个domainPrice设置为BigDecimal数据类型的域类.现在我正在尝试创建一个比较价格的方法,但似乎我不能在BigDecimal数据类型中有比较运算符.我是否必须更改数据类型或是否有其他方法?
Class的每个对象BigDecimal
都有一个方法compareTo
可用于将它与另一个BigDecimal进行比较.compareTo
然后将结果进行比较> 0
,== 0
或者< 0
根据您的需要进行比较.阅读文档,你会发现.
运营商==
,<
,>
等只能在基本数据类型等中使用int
,long
,double
或它们的包装类等Integer
和Double
.
来自以下文件compareTo
:
将其
BigDecimal
与指定的进行比较BigDecimal
.
BigDecimal
通过此方法,两个值相等但具有不同比例(如2.0和2.00)的对象被认为是相等的.对于六个布尔比较运算符(<,==,>,> =,!=,<=)中的每一个,优先考虑该方法.建议用于执行这些比较的习惯是:(x.compareTo(y)
,0) 六个比较运算符之一.
返回:-1,0或1,因为此BigDecimal在数值上小于,等于或大于val.
简而言之:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<" firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">" firstBigDecimal.compareTo(secondBigDecimal) == 0 // "==" firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="
使用compareTo
BigDecimal 的方法:
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.
您可以使用命名的方法compareTo
,x.compareTo(y)
.如果x和y相等则返回0,如果x大于y则返回1,如果x小于y则返回-1
BigDecimal
不是原始的,所以你不能使用<
,>
运算符.但是,因为它是a Comparable
,你可以使用compareTo(BigDecimal)
相同的效果.例如:
public class Domain { private BigDecimal unitPrice; public boolean isCheaperThan(BigDecimal other) { return unitPirce.compareTo(other.unitPrice) < 0; } // etc... }