前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BIgDecimal()和BigInteger()运算add(),sub(),div(),muti()加减乘除其实都是有返回值的

BIgDecimal()和BigInteger()运算add(),sub(),div(),muti()加减乘除其实都是有返回值的

作者头像
知识浅谈
发布2020-11-12 11:17:24
5290
发布2020-11-12 11:17:24
举报
文章被收录于专栏:分享学习分享学习

BigDecimal的加法源码如下,都是有返回值的。 因为BigInteger与BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以 a.add(b)虽然做了加法操作,但是a并没有保存加操作后的值,正确的用法应该是a=a.add(b); 减乘除操作也是一样的返回一个新的BigDecimal对象。

代码语言:javascript
复制
public BigDecimal add(BigDecimal augend) {
    long xs =this.intCompact; //整型数字表示的BigDecimal,例a的intCompact值为122
    long ys = augend.intCompact;//同上
    //初始化BigInteger的值,intVal为BigDecimal的一个BigInteger类型的属性
    BigInteger fst = (this.intCompact !=INFLATED) ?null :this.intVal;
    BigInteger snd =(augend.intCompact !=INFLATED) ?null : augend.intVal;
    int rscale =this.scale;//小数位数
    long sdiff = (long)rscale - augend.scale;//小数位数之差
    if (sdiff != 0) {//取小数位数多的为结果的小数位数
     if (sdiff < 0) {
         int raise =checkScale(-sdiff);
         rscale =augend.scale;
         if (xs ==INFLATED ||(xs = longMultiplyPowerTen(xs,raise)) ==INFLATED)
           fst =bigMultiplyPowerTen(raise);
         }else {
           int raise =augend.checkScale(sdiff);
           if (ys ==INFLATED ||(ys =longMultiplyPowerTen(ys,raise)) ==INFLATED)
             snd = augend.bigMultiplyPowerTen(raise);
         }
      }
    if (xs !=INFLATED && ys !=INFLATED) {
       long sum = xs + ys;
       if ( (((sum ^ xs) &(sum ^ ys))) >= 0L)//判断有无溢出
         //返回使用BigDecimal的静态工厂方法得到的BigDecimal实例
         return BigDecimal.valueOf(sum,rscale);
    }
    if (fst ==null)
        fst =BigInteger.valueOf(xs);//BigInteger的静态工厂方法
    if (snd ==null)
        snd =BigInteger.valueOf(ys);
    BigInteger sum =fst.add(snd);
    //返回通过其他构造方法得到的BigDecimal对象
    return (fst.signum == snd.signum) ?new BigDecimal(sum,INFLATED, rscale, 0) :
      new BigDecimal(sum,compactValFor(sum),rscale, 0);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档