BigDecimal的加减乘除,以及四舍五入和比较大小
加法:add()函数
减法:subtract()函数
乘法:multipy()函数
除法:divide()函数
首先进行初始化
这里对比了两种形式,第一种直接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 result1 = num1.add(num2);
System.out.println("加法用value结果"+result1);
BigDecimal result12 = num12.add(num22);
System.out.println("加法用String结果"+result12);//减法
BigDecimal result2 = num1.subtract(num2);
System.out.println("减法用value结果"+result2);
BigDecimal result22 = num12.subtract(num22);
System.out.println("减法用String结果"+result22);//乘法
BigDecimal result3 = num1.multiply(num2);
System.out.println("乘法用value结果"+result3);
BigDecimal result32 = num12.multiply(num22);
System.out.println("乘法用String结果"+result32);//绝对值
BigDecimal result4 = num3.abs();
System.out.println("绝对值用value结果"+result4);
BigDecimal result42 = num32.abs();
System.out.println("绝对值用String结果"+result42);//除法
BigDecimal result5 = num2.divide(num1,20,BigDecimal.ROUND_HALF_UP);
System.out.println("除法用value结果"+result5);
BigDecimal result52 = num22.divide(num12,20,BigDecimal.ROUND_HALF_UP);
System.out.println("除法用String结果"+result52);
得到的结果:(用String初始化)
注:
1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。
2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的!
因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDecimal类的构造方法注释中有说明。
3)除法divide()函数:使用除法函数divide()的时候,如果是除2、10或者100等可以除尽的时候,不需要精确的小数位数和舍入模式(也可以加),如果是除不尽的则必须加精确的小数位数和舍入模式,不然会报错。
divide(BigDecimal divisor 除数, int scale 精确小数位, int roundingMode 舍入模式)
八种舍入模式解释如下
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。
比较大小
BigDecimal a = new BigDecimal ("101");
BigDecimal b = new BigDecimal ("111");//使用compareTo方法比较
//注意:a、b均不能为null,否则会报空指针
if(a.compareTo(b) == -1){System.out.println("a小于b");
}if(a.compareTo(b) == 0){System.out.println("a等于b");
}if(a.compareTo(b) == 1){System.out.println("a大于b");
}if(a.compareTo(b) > -1){System.out.println("a大于等于b");
}if(a.compareTo(b) < 1){System.out.println("a小于等于b");
}
BigDecimal的加减乘除,以及四舍五入和比较大小相关推荐
- 记录---基于BigDecimal的特殊的四舍五入
机试问题-实现基于BigDecimal的特殊的四舍五入. 这是一道外企的机试题,我把里面的某个难点部分,摘出来详细如下: //实现特殊的四舍五入,先普通四舍五入取到小数点后两位,然后最后一位向后进位, ...
- BigDecimal加减乘除次方运算及比较大小
BigDecimal需要进行初始化,这里我对比两种初始化值的结果 BigDecimal big1 = new BigDecimal(0.05);BigDecimal big2 = new BigDec ...
- 小数(BigDecimal)加减乘除、比较大小
java中: public static BigDecimal math(BigDecimal b1,BigDecimal b2){ // 1.加法(b1加b2) BigDecimal add = ...
- java工作笔记018---java中BigDecimal小数位数的四舍五入等操作
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个电视购物项目大量用到了BigDecimal,有钱内存大,哈哈 一.简介 Java在java.m ...
- 详解BigDecimal及其加减乘除运算
目录 一.BigDecimal概述 二.构造函数详解 1.BigDecimal(int val) 2.BigDecimal(int val, MathContext mc) MathContext 3 ...
- bigdicmal除法精度设置_java中BigDecimal进行加减乘除的基本用法
前言 众所周知Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或 ...
- 封装BigDecimal的加减乘除方法,保留自定义位小数的工具。
首先效果展示: public static void main(String[] args) {String s1="2.560";String s2="0.525&qu ...
- BigDecimal的加减乘除
加法 add()函数 减法subtract()函数 乘法multiply()函数 除法divide()函数 绝对值abs()函数
- Java中BigDecimal类型的加减乘除及大小比对
Java中BigDecimal类型的加减乘除及大小比对 前言 BigDecimal解释 创建BigDecimal类型 加减乘除计算 结果分析 结论 除法的补充 两个BigDecimal的比对 前言 在 ...
最新文章
- Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示
- redis 之 sds (二) char []
- Recommend索引
- 介绍一下python有趣的库-tqdm
- springboot web项目_Vue、Spring Boot开发小而完整的Web前后端分离项目实战12
- ImportError: No module named Cython.Build
- iOS开发-开发总结(四)
- 视图和表的区别和联系
- [Android] Bitmap OOM解决办法一
- evt参数是干啥用的_塑料凳子上的洞,是干啥用的?
- wpf checkbox选中触发事件_Web前端开发(16)——JQuery事件绑定与插件
- 20200119:(leetcode)回文数(3种解法)
- mui点击添加类名_Mui使用jquery并且使用点击跳转新窗口的实例
- 计算机中丢失pbvm80,修复pbvm80.dll
- 打开 .npy文件 并显示
- mysql 章节作业题
- 对于无人驾驶技术(驾驶自动化)L0-L5分级的说明
- 您的计算机无法启动磁盘损坏,解决办法:如何修复SATA硬盘损坏并无法启动?...
- 过滤树形结构数组的方法
- 编写程序数一下 1到 100 的所有整数中出现多少次数字9_C语言编写