java.math.BigDecimal;
BigDecimal: 属于 java.math.BigDecimal;
先介绍下BigDecimal
在我们写代码过程中有时会遇到较⼤数字之间的计算问题,⽐如⾦额的计算,这个时候使⽤浮点类型进⾏计算可能就不那么准确了,会损失⼀定的精准度.
如果要⽤BigDecimal 进⾏数学运算,不能使⽤+ , - ,* , /等传统运算符,⽽要调⽤其对应的⽅法;
很多知识是⾃⼰操作了⼀遍才了解,虽然不是很难的知识点.例如BigDecimal 运算,我所不了解的地⽅.
1, BigDecimal 初始化
// 第⼀种,value 数字(浮点(不推荐,因为值不精准,如下图所⽰))
BigDecimal num1 = new BigDecimal(5);
BigDecimal num2 = new BigDecimal(0.05);
BigDecimal num3 = new BigDecimal(-5);
// 第⼆种,字符串表⽰(推荐使⽤)
BigDecimal num11 = new BigDecimal("5");
BigDecimal num12 = new BigDecimal("0.05");
BigDecimal num13 = new BigDecimal("-5");
// 特殊的值(0、1、10)
BigDecimal num21 = BigDecimal.ZERO;//0
和普通的数据类型赋值不同,BigDecimal 需要创建对象,特殊值虽然不需要我们创建,但是在底层也是new 了对象的.
这就是推荐使⽤字符串创建BigDecimal 数据的原因,使⽤value 创建的数据计算出来的结果出⼊很⼤.
类型
1), ROUND_UP:⽆论后⾯是多少(后⾯是0的话除外)
+1.
(后⾯是0的话除外),在绝对值的⾓度,始终对⾮零舍弃部分前⾯的数字+1
不会对舍弃部分前⾯的数字+1
ROUND_DOWN:⽆论后⾯是多少,都直接丢弃,不会
3),3), ROUND_CEILING ROUND_CEILING:⽆论后⾯是多少(后⾯是0的话除外)(后⾯是0的话除外),
值为正正,舍⼊模式与ROUND_UP相同,
值为负负,舍⼊模式与ROUND_DOWN相同.
4),4), ROUND_FLOOR ROUND_FLOOR:⽆论后⾯是多少(后⾯是0的话除外)(后⾯是0的话除外),
值为正正,舍⼊模式与ROUND_DOWN相同,
值为负负,舍⼊模式与ROUND_UP相同.
5),5), ROUND_HALF_UP ROUND_HALF_UP:在绝对值的⾓度舍和⼊,这就是我们熟识的四舍五⼊模式;四舍五⼊模式;
如果与两个相邻数字的距离相等距离相等,则为向上舍⼊的舍⼊模式。
如果舍弃部分 >= 0.5>= 0.5,则舍⼊⾏为与 ROUND_UP 相同;
否则
否则舍⼊⾏为与 ROUND_DOWN 相同。6), ROUND_HALF_DOWN
6), ROUND_HALF_DOWN:在绝对值的⾓度舍和⼊;如果与两个相邻数字的距离相等距离相等,则为向上舍⼊的舍⼊模式。
如果舍弃部分 > 0.5,则舍⼊⾏为与 ROUND_UP 相同;
否则否则舍⼊⾏为与 ROUND_DOWN 相同(五舍六⼊五舍六⼊)。
7),7), ROUND_HALF_EVEN ROUND_HALF_EVEN:bigdecimal除法保留小数
如果与两个相邻数字的距离相等距离相等,则向相邻的偶数舍⼊。
如果舍弃部分左边的数字为奇数奇数,则舍⼊⾏为与 ROUND_HALF_UP 相同;
如果为偶数偶数,则舍⼊⾏为与 ROUND_HALF_DOWN 相同。
注意
注意,在重复进⾏⼀系列计算时,此舍⼊模式可以将累加错误减到最⼩。此舍⼊模式也称为“银⾏家舍⼊法银⾏家舍⼊法”,主要在美国使⽤。四舍六⼊,五分两种情况。
如果前⼀位为奇数,则⼊位,否则舍去。
以下例⼦为保留⼩数点1位,那么这种舍⼊⽅式下的结果。
1.15->1.2
1.25->1.2
8), ROUND_UNNECESSARY 8), ROUND_UNNECESSARY: 断⾔请求的操作具有精确的结果,因此不需要舍⼊((如果对获得精确结果的操作指定此舍⼊模式,则抛出ArithmeticException。).).
3,BigDecimal 累加
在写项⽬时遇到的,因为BigDecimal 中没有 += += 这种累加操作,下⾯是使⽤add () 函数⽰列:
第⼀种最后得不到你想要的结果,你拿到的值还是原来的初始值.
//⽆效
sumIntegral.Integral());
//有效
sumIntegral = sumIntegral.Integral());
⼩弟才疏学浅,有问题的地⽅欢迎⼤家指正,BigDecimal 的坑先填到这了,如果对你有帮助帮忙点赞,收藏,关注⾛⼀波!
参考: