BigDecimal等值比较该用什么方法

1. 用 “==”比较

  • 代码示例
  BigDecimal bigDecimal1 = BigDecimal.valueOf(0.00);
  BigDecimal bigDecimal2 = BigDecimal.valueOf(0.00);
  System.out.println(bigDecimal1 == bigDecimal2);
  • 比较结果
false
  • 原因
    因为BigDecimal是对象,所以不能用==来判断两个数字的值是否相等。

2. 用 “equals”比较

  • 代码示例1
BigDecimal bigDecimal1 = BigDecimal.valueOf(0.00);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.00);
System.out.println(bigDecimal1.equals(bigDecimal2));
  • 比较结果
true
  • 代码示例2
BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.0);
System.out.println(bigDecimal1.equals(bigDecimal2));
  • 比较结果
false
  • 原因
    equals方法会比较两部分内容,分别是值(value)和精度(scale),源码如下
    image.png

3. 用 “compareTo”比较

  • 代码示例1
BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.0);
System.out.println(bigDecimal1.compareTo(bigDecimal2));
  • 比较结果
0
  • 原因
    BigDecimal中提供了compareTo方法,这个方法就可以只比较两个数字的值,如果两个数相等,则返回0,源码如下。
    image.png

总结

BigDecimal是一个非常好用的表示高精度数字的类,其中提供了很多丰富的方法。但是,他的equals方法使用的时候需要谨慎,因为他在比较的时候,不仅比较两个数字的值,还会比较他们的精度,只要这两个因素有一个是不相等的,那么结果也是false、如果读者想要对两个BigDecimal的数值进行比较的话,可以使用compareTo方法。

参考文档:BigDecimal不能使用equals 做等值比较

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容