BIgDecimal()和BigInteger()运算add(),sub(),div(),muti()加减乘除其实都是有返回值的
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()加减乘除其实都是有返回值的相关推荐
- 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)
获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题) 参考文章: (1)获取可视区域高度赋值给div(解决document.body.client ...
- Java的BigDecimal,对运算封装
添加maven依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...
- 常用类 (三) ----- BigDecimal和BigInteger大数类
相关文章: <常用类 (一) ----- Arrays数组工具类> <常用类 (二) ----- Math类> <常用类 (三) ----- BigDecimal和Big ...
- BigDecimal数据加法返回值接收
1.相加 两个BigDecimal变量a,b. 如果想进行相加,即a加b的话,返回值需要使用a进行接收,如下: a = a.add(b); BigDecimal为不可变类, 所以执行运算的结果需要再返 ...
- 位运算的应用----->实现加减乘除
首先我们想想位操作符-> ^ (异或) 异或可以相当于无进位相加 同时我们的进位为信息也可以用 (x & y)<<1来表示 那么我么的"+"可以相当于是 ...
- 【前端06_JS_ECMA 语法标准】声明变量、数据类型*、tupeof返回值、输入输出、运算、循环、条件、函数*、事件*
JavaScript_ECMA 概述 ECMA 语法标准 声明变量 全局变量 注释方法 数据类型 * typeOf 能返回的值 * 输入与输出 运算 算数运算 赋值运算 关系运算 关系运算中的特殊题目 ...
- 一元操作符、强制类型转换表达式、乘除操作符、加法操作符、移位操作符、关系操作符、判等操作符、位操作符与逻辑操作符、条件与操作符、条件或操作符--运算机制与返回值
操作符处理及返回值 先遣提示 一元操作符 前缀递增操作符 ++ 前缀递增操作符 - - 一元加号操作符 + 关于一元数值提升或二元数值提升 可以看这篇博客 一元减号操作符 - 这里涉及了 原码,反码, ...
- 假设我们在对有符号值使用补码运算的32位机器人运行代码。对于有符号值使用的是算术右移,而对于无符号值使用的是逻辑右移
假设我们在对有符号值使用补码运算的32位机器人运行代码.对于有符号值使用的是算术右移,而对于无符号值使用的是逻辑右移.变量的声明和初始化如下: int x = foo(); //任意值 int y = ...
- 使用BigDecimal进行精确运算
首先我们先来看如下代码示例: 1 public class Test_1 { 2 public static void main(String[] args) { 3 System.out.print ...
最新文章
- oracle数据库 pc6,使用logdump 查看ogg的CSN
- linux删除旧网卡,如何删除旧网卡驱动
- Unity5x编辑器的主菜单和布局
- 如何用RHEL System Role把Postfix安装和配置自动化?
- asp从后台调出的公式怎么参与运算_吴望一《流体力学》第一章中微分运算公式的初等证明...
- 数据挖掘的11大算法及python实现(个人笔记整理,非教学用)
- 简单论述市场营销管理的基本过程
- 在vm中安装linux虚拟机,如何在vm虚拟机中安装linux
- vc读取北通手柄按键_《噬血代码》手柄怎么操作 北通手柄按键功能详解
- 用Notepad++写python的小配置
- 一步一步写算法(之链表重合)
- Hello Rails
- 光纤交换机分为哪几种 光纤交换机连接图
- SX1308锂电池升压1.5—3.7升5v1.5A 专为太阳能灯开发的DC/DC直流升压IC
- 提示GuestAdditions versions on your host (6.1.32) and guest (6.1.22) do not match错误的解决方法
- 武汉大学计算机专业考研靠什么,武汉大学计算机技术考研科目有哪些?
- CFD:安装软件(step2)
- 统计自然语言处理基础-第四章 基于语料库的工作(笔记)
- DevicePolicyManager(三)设备管理器使用案例——实现一键锁屏
- 白侠机器人_白侠微信多群直播机器人,引领全新直播潮流