前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BigDecimal比较大小

BigDecimal比较大小

作者头像
六月的雨在Tencent
发布2024-03-28 21:17:38
620
发布2024-03-28 21:17:38
举报
文章被收录于专栏:CSDNCSDN
BigDecimal比较大小

BigDecimal

BigDecimal,是一种java.math包中提供的一种可以用来进行精确运算的类型,在进行金额表示、金额计算等场景,不能使用double、float等类型,而是要使用对精度支持的更好的BigDecimal。

所以,很多支付、电商、金融等业务中,BigDecimal的使用非常频繁,其内部自带了很多方法,如加,减,乘,除等运算方法都是可以直接调用的,代码中还经常需要对于数字进行相等判断。

BigDecimal比较

==比较
代码语言:javascript
复制
BigDecimal bigDecimal = new BigDecimal(1);
BigDecimal bigDecimal1 = new BigDecimal(1);
System.out.println(bigDecimal == bigDecimal1);
//false

有人会犯这种低级错误,用==直接比较肯定是无法得到自己想要的情况的,因为BigDecimal是对象,所以是无法用==来比较两个数字的值是否相等。

== 可以用来比较基本类型的数值,例如:

代码语言:javascript
复制
int a = 1;
int b = 1;
System.out.println(a==b);
//true

== 用来比较对象,比较的是引用对象的引用地址,例如:

代码语言:javascript
复制
BigDecimal bigDecimal = new BigDecimal(1);
BigDecimal bigDecimal1 = new BigDecimal(1);

System.out.println(bigDecimal == bigDecimal1);
//false

由于对象的引用地址不一样,所以返回false。

equals 比较
代码语言:javascript
复制
BigDecimal bigDecimal = new BigDecimal(1);
BigDecimal bigDecimal1 = new BigDecimal(1);
System.out.println(bigDecimal.equals(bigDecimal1));
//true


BigDecimal bigDecimal2 = new BigDecimal(1);
BigDecimal bigDecimal3 = new BigDecimal(1.0);
System.out.println(bigDecimal2.equals(bigDecimal3));
//true


BigDecimal bigDecimal4 = new BigDecimal("1");
BigDecimal bigDecimal5 = new BigDecimal("1.0");
System.out.println(bigDecimal4.equals(bigDecimal5));
//false

通过结果可以看出BigDecimal在进行equals比较时,有的时候是true(当使用int、double定义BigDecimal时),有的时候是false(当使用String定义BigDecimal时)。 在BigDecimal的JavaDoc注释中提到,equals和compareTo比较不太一样,equals比较时会比较value and scale,所以再来看上面bigDecimal4和bigDecimal5的结果就明白了

那么为什么用int 、double定义BigDecimal时就一样呢

  • 用int时debug结果图

其中scale和xDec.scale的值都是0

  • 用double时debug结果图

其中scale和xDec.scale的值都是0

  • 用string时debug结果图

其中bigDecimal4的scale是0,而bigDecimal5的scale是1,这样比较的结果就是false了。

前面,我们解释了BigDecimal的equals方法,其实不只是会比较数字的值,还会对其标度进行比较。

所以,当我们使用equals方法判断判断两个数是否相等的时候,是极其严格的。

compareTo比较

针对上面equals比较比较严格的情况,如果只想比较值呢,BigDecimal为我们提供了compareTo方法。

代码语言:javascript
复制
BigDecimal bigDecimal4 = new BigDecimal("1");
BigDecimal bigDecimal5 = new BigDecimal("1.0");
System.out.println(bigDecimal4.equals(bigDecimal5));
//false

BigDecimal bigDecimal6 = new BigDecimal("1");
BigDecimal bigDecimal7 = new BigDecimal("1.0");
System.out.println(bigDecimal6.compareTo(bigDecimal7));
//0

此时我们看到bigDecimal6和bigDecimal7比较的值为0,即相等。 我们可以看到BigDecimal中compareTo的JavaDoc注释,compareTo只比较值,其中返回结果:-1表示小于,0表示等于,1表示大于

一般BigDecimal值的比较用compareTo就好,用equals比较的话可能会得到不是你想要的结果而自己又不曾意识到。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BigDecimal比较大小
  • BigDecimal
  • BigDecimal比较
    • ==比较
      • equals 比较
        • compareTo比较
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com