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

public BigDecimal add(BigDecimal augend) {long xs =this.intCompact; //整型数字表示的BigDecimal,例a的intCompact值为122long 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);
}

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

  1. 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)

    获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题) 参考文章: (1)获取可视区域高度赋值给div(解决document.body.client ...

  2. Java的BigDecimal,对运算封装

    添加maven依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...

  3. 常用类 (三) ----- BigDecimal和BigInteger大数类

    相关文章: <常用类 (一) ----- Arrays数组工具类> <常用类 (二) ----- Math类> <常用类 (三) ----- BigDecimal和Big ...

  4. BigDecimal数据加法返回值接收

    1.相加 两个BigDecimal变量a,b. 如果想进行相加,即a加b的话,返回值需要使用a进行接收,如下: a = a.add(b); BigDecimal为不可变类, 所以执行运算的结果需要再返 ...

  5. 位运算的应用----->实现加减乘除

    首先我们想想位操作符->  ^ (异或) 异或可以相当于无进位相加 同时我们的进位为信息也可以用 (x & y)<<1来表示 那么我么的"+"可以相当于是 ...

  6. 【前端06_JS_ECMA 语法标准】声明变量、数据类型*、tupeof返回值、输入输出、运算、循环、条件、函数*、事件*

    JavaScript_ECMA 概述 ECMA 语法标准 声明变量 全局变量 注释方法 数据类型 * typeOf 能返回的值 * 输入与输出 运算 算数运算 赋值运算 关系运算 关系运算中的特殊题目 ...

  7. 一元操作符、强制类型转换表达式、乘除操作符、加法操作符、移位操作符、关系操作符、判等操作符、位操作符与逻辑操作符、条件与操作符、条件或操作符--运算机制与返回值

    操作符处理及返回值 先遣提示 一元操作符 前缀递增操作符 ++ 前缀递增操作符 - - 一元加号操作符 + 关于一元数值提升或二元数值提升 可以看这篇博客 一元减号操作符 - 这里涉及了 原码,反码, ...

  8. 假设我们在对有符号值使用补码运算的32位机器人运行代码。对于有符号值使用的是算术右移,而对于无符号值使用的是逻辑右移

    假设我们在对有符号值使用补码运算的32位机器人运行代码.对于有符号值使用的是算术右移,而对于无符号值使用的是逻辑右移.变量的声明和初始化如下: int x = foo(); //任意值 int y = ...

  9. 使用BigDecimal进行精确运算

    首先我们先来看如下代码示例: 1 public class Test_1 { 2 public static void main(String[] args) { 3 System.out.print ...

最新文章

  1. oracle数据库 pc6,使用logdump 查看ogg的CSN
  2. linux删除旧网卡,如何删除旧网卡驱动
  3. Unity5x编辑器的主菜单和布局
  4. 如何用RHEL System Role把Postfix安装和配置自动化?
  5. asp从后台调出的公式怎么参与运算_吴望一《流体力学》第一章中微分运算公式的初等证明...
  6. 数据挖掘的11大算法及python实现(个人笔记整理,非教学用)
  7. 简单论述市场营销管理的基本过程
  8. 在vm中安装linux虚拟机,如何在vm虚拟机中安装linux
  9. vc读取北通手柄按键_《噬血代码》手柄怎么操作 北通手柄按键功能详解
  10. 用Notepad++写python的小配置
  11. 一步一步写算法(之链表重合)
  12. Hello Rails
  13. 光纤交换机分为哪几种 光纤交换机连接图
  14. SX1308锂电池升压1.5—3.7升5v1.5A 专为太阳能灯开发的DC/DC直流升压IC
  15. 提示GuestAdditions versions on your host (6.1.32) and guest (6.1.22) do not match错误的解决方法
  16. 武汉大学计算机专业考研靠什么,武汉大学计算机技术考研科目有哪些?
  17. CFD:安装软件(step2)
  18. 统计自然语言处理基础-第四章 基于语料库的工作(笔记)
  19. DevicePolicyManager(三)设备管理器使用案例——实现一键锁屏
  20. 白侠机器人_白侠微信多群直播机器人,引领全新直播潮流

热门文章

  1. Xcode Cloud试用
  2. THREE + d3制作中国地图挤压(extrude)模型
  3. 解决IPad和IPhone接收exchange邮件…
  4. oracle ORA-01704: string literal too long
  5. LInux配置php全局变量
  6. 数据与广告系列十二:接上一篇,见习算法工程师教程
  7. AirBuddy 1.0.4 Mac 实用的 AirPods 耳机管理工具
  8. services.msc无法启动,提示:管理员已阻止你运行此应用
  9. 跟领导提离职了,现在后悔,想留下来,怎么办?
  10. linux 显示行号