Java 如何使用比较运算符,如>;,=&书信电报;关于大十进制
我有一个unitPrice设置为BigDecimal数据类型的域类。现在我正在尝试创建一个比较价格的方法,但似乎无法在BigDecimal数据类型中使用比较运算符。我必须更改数据类型还是有其他方法?类的每个对象Java 如何使用比较运算符,如>;,=&书信电报;关于大十进制,java,operator-keyword,bigdecimal,Java,Operator Keyword,Bigdecimal,我有一个unitPrice设置为BigDecimal数据类型的域类。现在我正在尝试创建一个比较价格的方法,但似乎无法在BigDecimal数据类型中使用比较运算符。我必须更改数据类型还是有其他方法?类的每个对象BigDecimal都有一个方法可以用来将其与另一个BigDecimal进行比较。然后根据需要将比较的结果与>0、==0或=,!=,使用BigDecimal的方法: public int compareTo(BigDecimal val)将此BigDecimal与 指定的BigDecima
BigDecimal
都有一个方法可以用来将其与另一个BigDecimal进行比较。然后根据需要将比较的结果与>0
、==0
或<0
进行比较。阅读文档,你会发现
运算符=
、
等只能用于基本数据类型,如int
、long
、double
或其包装类,如Integer
和double
从的文档比较到:
将此BigDecimal
与指定的BigDecimal
进行比较
两个BigDecimal
值相等但比例不同的对象(如2.0
和2.00)通过该方法被视为相等。提供了这种方法
优先于六个布尔函数中每个函数的单独方法
比较运算符(,>=,!=,使用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.
不是基元,因此不能使用
运算符。但是,由于它是a,因此可以使用具有相同效果的。例如:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
公共类域{
私人单位价格;
公共布尔值isCheaperThan(BigDecimal其他){
返回单位价格比(其他单位价格)<0;
}
//等等。。。
}
您可以使用名为compareTo
,x.compareTo(y)
的方法。如果x和y相等,则返回0;如果x大于y,则返回1;如果x小于y,则返回-1,简称:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="
firstBigDecimal.compareTo(secondBigDecimal)<0/“”
firstBigDecimal.compareTo(secondBigDecimal)==0/“==”
firstBigDecimal.compareTo(secondBigDecimal)>=0/“>=”
使用ibm的com.ibm.etools.marshall.util.BigDecimalRange util类可以比较BigDecimal是否在范围内
boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);
下面是所有六个布尔比较运算符(,>=,!=,-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);//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);//false
System.out.println(big10.compareTo(big20)>1);//false
System.out.println(big10.compareTo(big20)!=1);//true
此线程提供了大量答案,说明该方法是用于比较实例的方法。我只是想让没有使用该方法经验的人注意如何创建实例。例如
new BigDecimal(0.8)
将创建一个BigDecimal
实例,其值不完全是0.8
,其刻度为50+
new BigDecimal(“0.8”)
将创建一个BigDecimal
实例,其值正好为0.8
,且其刻度为1
…根据该方法,这两者将被视为不相等,因为当刻度不限于小数点后几位时,它们的值是不相等的
首先,请小心使用BigDecimal(String val)
构造函数或BigDecimal.valueOf(double val)
方法而不是BigDecimal(double val)创建BigDecimal
实例
构造函数。其次,请注意,在使用该方法比较实例之前,您可以限制实例的规模。因为BigDecimal
是一个对象
,不,这不起作用。但您可以简单地从彼此中减去一个,然后检查结果值是否为0
。否则,您可以使用标准值为什么有一个compareTo
方法返回-1、0或1。这基本上是正确的。但是compareTo方法是否有助于发现价格是否大于、等于或低于?是。这些信息在答案中提供的链接中。@user3127109是,a.compareTo(b)
如果a>b
,则返回大于零的数字;如果a==b
,则返回小于零的数字;如果a
,则返回小于零的数字。
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