我有一个将unitPrice设置为BigDecimal数据类型的域类。现在,我正在尝试创建一种比较价格的方法,但似乎我没有BigDecimal数据类型的比较运算符。我必须更改数据类型还是其他方法?
compareTo
返回-1、0或1 的方法的原因Comparable
。
我有一个将unitPrice设置为BigDecimal数据类型的域类。现在,我正在尝试创建一种比较价格的方法,但似乎我没有BigDecimal数据类型的比较运算符。我必须更改数据类型还是其他方法?
compareTo
返回-1、0或1 的方法的原因Comparable
。
Answers:
Class的每个对象BigDecimal
都有一个compareTo
可用来将其与另一个BigDecimal进行比较的方法。compareTo
然后比较的结果> 0
,== 0
或者< 0
根据需要进行比较。阅读文档,您将找到答案。
运营商==
,<
,>
等只能在基本数据类型等中使用int
,long
,double
或它们的包装类等Integer
和Double
。
从以下文档中compareTo
:
将其
BigDecimal
与指定的进行比较BigDecimal
。
BigDecimal
此方法将值相等但规模不同的两个对象(例如2.0和2.00)视为相等。对于六个布尔比较运算符(<,==,>,> =,!=,<=)中的每一个,该方法优先于单个方法提供。建议执行这些比较的习惯用法是:(x.compareTo(y) <op> 0)
,其中<op>
是六个比较运算符之一。返回:-1、0或1,因为此BigDecimal在数值上小于,等于或大于val。
a.compareTo(b)
如果a > b
,0
则返回一个大于零的数字,如果a == b
,则返回一个小于零的数字a < b
。
您可以使用命名的方法compareTo
,x.compareTo(y)
。如果x和y相等,则返回0;如果x大于y,则返回1;如果x小于y,则返回-1。
这是所有六个布尔比较运算符(<,==,>,> =,!=,<=)的示例:
BigDecimal big10 = new BigDecimal(10);
BigDecimal big20 = new BigDecimal(20);
System.out.println(big10.compareTo(big20) < -1); // false
System.out.println(big10.compareTo(big20) <= -1); // true
System.out.println(big10.compareTo(big20) == -1); // true
System.out.println(big10.compareTo(big20) >= -1); // true
System.out.println(big10.compareTo(big20) > -1); // false
System.out.println(big10.compareTo(big20) != -1); // false
System.out.println(big10.compareTo(big20) < 0); // true
System.out.println(big10.compareTo(big20) <= 0); // true
System.out.println(big10.compareTo(big20) == 0); // false
System.out.println(big10.compareTo(big20) >= 0); // false
System.out.println(big10.compareTo(big20) > 0); // false
System.out.println(big10.compareTo(big20) != 0); // true
System.out.println(big10.compareTo(big20) < 1); // true
System.out.println(big10.compareTo(big20) <= 1); // true
System.out.println(big10.compareTo(big20) == 1); // false
System.out.println(big10.compareTo(big20) >= 1); // false
System.out.println(big10.compareTo(big20) > 1); // false
System.out.println(big10.compareTo(big20) != 1); // true
BigDecimal
是不是原始的,所以你不能使用的<
,>
经营者。但是,由于它是Comparable
,您可以使用compareTo(BigDecimal)
来达到相同的效果。例如:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
该线程有很多答案,指出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.valueOf(double val)
方法而不是BigDecimal(double val)
构造函数创建实例。其次,请注意,在通过BigDecimal.setScale(int newScale,RoundingMode roundingMode)方法进行比较之前,可以限制BigDecimal实例的大小。
BigDecimal
是Object
,所以这行不通。但是,你可以简单地减去一个相互并检查结果值<0
,==0
或>0
。否则,您可以使用BigDecimal中