概述
BigDecimal 的等值比较应使用 compareTo() 方法,而不是 equals() 方法。
为什么呢,我们看一下代码:
public static void main(String[] args) {
//
final BigDecimal b1 = new BigDecimal("1.0");
final BigDecimal b2 = new BigDecimal("1.00");
System.out.println(b1.equals(b2));
}
返回结果是什么呢,运行一下就知道了
false
可能有的人不明白,明明都是1,为什么是false呢,其实,equals() 方法会比较值和精度,它们的值虽然都是1,但精度却不相同,如果都改为相同精度在测试:
public static void main(String[] args) {
//
final BigDecimal b1 = new BigDecimal("1.00");
final BigDecimal b2 = new BigDecimal("1.00");
System.out.println(b1.equals(b2));
}
true
此时结果为true了,因为值和精度是一样的。
那么如果我们要用BigDecimal进行值比较的时候,不想考虑精度怎么办呢,这时候我们就可以使用compareTo方法了,针对一开始1.0和1.00的比较,我们可以使用compareTo:
public static void main(String[] args) {
//
final BigDecimal b1 = new BigDecimal("1.0");
final BigDecimal b2 = new BigDecimal("1.00");
System.out.println(b1.compareTo(b2) == 0);
}
true
1.01和1.00的比较:
public static void main(String[] args) {
//
final BigDecimal b1 = new BigDecimal("1.01");
final BigDecimal b2 = new BigDecimal("1.00");
System.out.println(b1.compareTo(b2) == 0);
}
false
此时b1.compareTo(b2) 的值是1,因为1.01>1.00
1.01和1.02的比较:
public static void main(String[] args) {
//
final BigDecimal b1 = new BigDecimal("1.01");
final BigDecimal b2 = new BigDecimal("1.02");
System.out.println(b1.compareTo(b2) == 0);
}
false
此时b1.compareTo(b2) 的值是-1,因为1.01<1.02
总结
总结,BigDecimal值比较的时候,尤其是带精度问题的,我们就可以使用compareTo方法来做了。
最后
以上就是耍酷花卷为你收集整理的BigDecimal的compareTo和equals方法的使用的全部内容,希望文章能够帮你解决BigDecimal的compareTo和equals方法的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复