BigDecimal加减乘除计算方式 System
作者:admin 发布时间:2024-02-14 10:51:01 分类:玩乐 浏览:74
BigDecimal的运算——加减乘除
首先是bigdecimal的初始化
这里对比了两种形式,第一种直接value写数字的值,第二种用string来表示
BigDecimal num1=new BigDecimal(0.005);
BigDecimal num2=new BigDecimal(1000000);
BigDecimal num3=new BigDecimal(-1000000);
//尽量用字符串的形式初始化
BigDecimal num12=new BigDecimal("0.005");
BigDecimal num22=new BigDecimal("1000000");
BigDecimal num32=new BigDecimal("-1000000");
我们对其进行加减乘除绝对值的运算
其实就是Bigdecimal的类的一些调用
加法 add()函数 减法subtract()函数
乘法multiply()函数 除法divide()函数 绝对值abs()函数
我这里承接上面初始化Bigdecimal分别用string和数进行运算对比
//加法
BigDecimal result1=num1.add(num2);
BigDecimal result12=num12.add(num22);
//减法
BigDecimal result2=num1.subtract(num2);
BigDecimal result22=num12.subtract(num22);
//乘法
BigDecimal result3=num1.multiply(num2);
BigDecimal result32=num12.multiply(num22);
//绝对值
BigDecimal result4=num3.abs();
BigDecimal result42=num32.abs();
//除法
BigDecimal result5=num2.divide(num1,20,BigDecimal.ROUND_HALF_UP);
BigDecimal result52=num22.divide(num12,20,BigDecimal.ROUND_HALF_UP);
我把result全部输出可以看到结果
这里出现了差异,这也是为什么初始化建议使用string的原因
※ 注意:
1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。
2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的!
因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDecimal类的构造方法注释中有说明。
完整的test代码如下:
import java.math.BigDecimal;
import java.util.Scanner;
public class TestThree {
public static void main(String[] args) {
BigDecimal num1=new BigDecimal(0.005);
BigDecimal num2=new BigDecimal(1000000);
BigDecimal num3=new BigDecimal(-1000000);
//尽量用字符串的形式初始化
BigDecimal num12=new BigDecimal("0.005");
BigDecimal num22=new BigDecimal("1000000");
BigDecimal num32=new BigDecimal("-1000000");
//加法
BigDecimal result1=num1.add(num2);
BigDecimal result12=num12.add(num22);
//减法
BigDecimal result2=num1.subtract(num2);
BigDecimal result22=num12.subtract(num22);
//乘法
BigDecimal result3=num1.multiply(num2);
BigDecimal result32=num12.multiply(num22);
//绝对值
BigDecimal result4=num3.abs();
BigDecimal result42=num32.abs();
//除法
BigDecimal result5=num2.divide(num1,20,BigDecimal.ROUND_HALF_UP);
BigDecimal result52=num22.divide(num12,20,BigDecimal.ROUND_HALF_UP);
System.out.println("加法用value结果:"+result1);
System.out.println("加法用string结果:"+result12);
System.out.println("减法value结果:"+result2);
System.out.println("减法用string结果:"+result22);
System.out.println("乘法用value结果:"+result3);
System.out.println("乘法用string结果:"+result32);
System.out.println("绝对值用value结果:"+result4);
System.out.println("绝对值用string结果:"+result42);
System.out.println("除法用value结果:"+result5);
System.out.println("除法用string结果:"+result52);
}
}
除法divide()参数使用
使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,不然会出现报错
我们可以看到divide函数配置的参数如下
即为 (BigDecimal divisor 除数, int scale 精确小数位, int roundingMode 舍入模式)
可以看到舍入模式有很多种BigDecimal.ROUND_XXXX_XXX, 具体都是什么意思呢
计算1÷3的结果(最后一种ROUND_UNNECESSARY在结果为无限小数的情况下会报错)
八种舍入模式解释如下
1、ROUND_UP
舍入远离零的舍入模式。
在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。
注意,此舍入模式始终不会减少计算值的大小。
2、ROUND_DOWN
接近零的舍入模式。
在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。
注意,此舍入模式始终不会增加计算值的大小。
3、ROUND_CEILING
接近正无穷大的舍入模式。
如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;
如果为负,则舍入行为与 ROUND_DOWN 相同。
注意,此舍入模式始终不会减少计算值。
4、ROUND_FLOOR
接近负无穷大的舍入模式。
如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;
如果为负,则舍入行为与 ROUND_UP 相同。
注意,此舍入模式始终不会增加计算值。
5、ROUND_HALF_UP
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。
如果舍弃部分 >=0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。
6、ROUND_HALF_DOWN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。
如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。
7、ROUND_HALF_EVEN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;
如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。
注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。
此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。
如果前一位为奇数,则入位,否则舍去。
以下例子为保留小数点1位,那么这种舍入方式下的结果。
1.15>1.2 1.25>1.2
8、ROUND_UNNECESSARY
断言请求的操作具有精确的结果,因此不需要舍入。
如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。
相关推荐
- 边城 美等国收入大学课本
- 今年有五家银行破产挪用存款人的钱 钱就“取不出来”了
- 赫本风风格走向非常优雅 突出身材优势
- 超搞笑小品 后续还推出了《卖车》
- 赵寅成女友李政宰曾在采访中说过 还被她迷恋的死心塌地
- 银行现行利率防范金融风险 多措并举稳住存款规模
- 金刚铠甲心咒 第一个是金刚铠甲心咒
- 西方酒文化古今中外的人们 用什么温度灼烫酒
- 赵本山一家 肯定有不少的留恋
- 连锁软件 加速数字化转型
- 邓宁图片 出道已经十多年
- 金雅中而此前关于整容 当然除了外貌加持
- 记忆大师王峰在“最强大脑”中 并担任中国队长
- 迪拜二王子 沙特王子哈曼丹
- 酒色财气这五本集结成功学规律 必须过得酒色财气四关
- 哪吒怎么读 【哪吒】是什么意思(来源
- 跑江湖顺口溜 收了摊子关了门
- 锻炼口才 向周围的人模仿
- 计算机毕业论文范文 这表示它们为显示状态
- 郭台铭与富士康眼中只有利益的郭台铭 富士康的未来
- 辱骂法院判决被告王某 朱女士特地装了监控
- 阿珍爱上啦阿强而就在最近的半个月里 本来就是很常见
- 美军将永久性驻扎波兰 从F-35战斗机
- 金属的冶炼 这些铜矿地矿量大
- 陈坤周迅 表妹开心异常
- 门捷列夫能出这样一位优秀才俊 并开始成为大学副教授
- 钦州市钦州市有2个区 你觉得钦州市哪个区
- 郑少东在这个事件中 更加和谐的社会
- 谢霆锋照片 用飘逸裙装和动感外套
- 西安最美公交女司机 我想坐她的车
- 最新推荐
-