我有一个将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中