use*_*109 88 java spring bigdecimal operator-keyword
我有一个domainPrice设置为BigDecimal数据类型的域类.现在我正在尝试创建一个比较价格的方法,但似乎我不能在BigDecimal数据类型中有比较运算符.我是否必须更改数据类型或是否有其他方法?
Sim*_*ant 101
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.
tor*_*ina 90
简而言之:
firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="
Run Code Online (Sandbox Code Playgroud)
Arn*_*aud 20
使用compareToBigDecimal 的方法:
public int compareTo(BigDecimal val)将此BigDecimal与指定的BigDecimal进行比较.
Run Code Online (Sandbox Code Playgroud)Returns: -1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
小智 15
以下是所有六个布尔比较运算符(<、==、>、>=、!=、<=)的示例:
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
Run Code Online (Sandbox Code Playgroud)
Pri*_*mre 12
或者,如果您已经在使用commons-lang3(版本3.10及更高版本),您可以ComparableUtils像这样利用他们的 API:
import static org.apache.commons.lang3.compare.ComparableUtils.is;
var areEqual = is(first).equalTo(second);
var isGreater = is(first).greaterThan(second);
var isLess = is(first).lessThan(second);
var isBetween = is(first).between(second, third);
// etc.
Run Code Online (Sandbox Code Playgroud)
无论如何,现在大多数大型项目都包含commons-lang3依赖项。
Adi*_*ain 10
该线程有大量答案,指出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首先,请小心使用BigDecimal(String val)构造函数或BigDecimal.valueOf(double val)方法而不是构造函数创建实例BigDecimal(double val)。其次,请注意,您可以在通过BigDecimal.setScale(int newScale, RoundingMode roundingMode)方法进行比较之前限制BigDecimal实例的范围。
BigDecimal不是原始的,所以你不能使用<,>运算符.但是,因为它是a Comparable,你可以使用compareTo(BigDecimal)相同的效果.例如:
public class Domain {
private BigDecimal unitPrice;
public boolean isCheaperThan(BigDecimal other) {
return unitPirce.compareTo(other.unitPrice) < 0;
}
// etc...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128186 次 |
| 最近记录: |