Java 如何使用比较运算符,如>;,=&书信电报;关于大十进制

Java 如何使用比较运算符,如>;,=&书信电报;关于大十进制,java,operator-keyword,bigdecimal,Java,Operator Keyword,Bigdecimal,我有一个unitPrice设置为BigDecimal数据类型的域类。现在我正在尝试创建一个比较价格的方法,但似乎无法在BigDecimal数据类型中使用比较运算符。我必须更改数据类型还是有其他方法?类的每个对象BigDecimal都有一个方法可以用来将其与另一个BigDecimal进行比较。然后根据需要将比较的结果与>0、==0或=,!=,使用BigDecimal的方法: public int compareTo(BigDecimal val)将此BigDecimal与 指定的BigDecima

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

类的每个对象
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