BigDecimal中的8中舍入模式详解

大家好 我是心安君 这是我在博客园的第3篇博客  这里和大家分享一下关于BigDecimal中8中舍入模式的解析

因为java底层的原因 输出double类型时会有微小误差   我们平常不涉及金额的项目中 这点误差可以忽略不计 但是如果我们在做与金额换算有关的项目时 比如银行一周的汇入量 这时候因为数据量巨大 所以即使微小的误差也会被放大 这个时候我们就不能再使用double类型的数据来表示金额了 所以就引进了BigDecimal类 当我们用它带字符串的构造器创建对象的时候 他是不会有精度损失的 所以用他做金额方面的换算非常适合   

BigDecimal类还有个特点就是它使我们用户完全控制数据的舍入模式  如果我们要将基本数据类型的数值格式化需要用到printf或者Math之类的方法,其实它们提供的舍入方法很少且不方便. 所以我们一般使用BigDecimal类来对数据进行舍入    一般都会调用到这个方法 : setScale(保留小数,舍入方法)

所以我们现在就来了解下BigDecimal中的8中舍入模式分别有什么作用

1. ROUND_UP  : 这种舍入模式是向远离0的方向舍入 比方说 -4.4 进行舍入就是 -5 ;   7.3进行舍入就是8;

2.ROUND_DOWN : 这种舍入模式和UP相反 是接近0的方向舍入 比方说-4.7进行舍入就是-4  ;  7.6进行舍入就是7;

3.ROUND_CEILING 向正无穷大取整 

4.ROUND_FLOOR:  向负无穷大取整

5.ROUND_HALF_UP : 这就是我们熟知的"四舍五入"

6.ROUND_HALF_DOWM : "五舍六入"

7.ROUND_HALF_EVEN : 向"最接近的"数字舍入,如果两个相邻数字距离相等,则向相邻的偶数舍入. 比如-5.5就向-6舍入 

8.ROUND_UNNECESSARY : 这个模式名副其实,确实是"unnecessary",其实就和没设置精度一样, 如果相除的结果不是精确值 则抛出一个ArithmeticException 异常. 

这就是BigDecimal中所有的的舍入模式 希望大家有所收获

posted @ 2020-07-05 18:42  安心敲代码就完事了  阅读(2092)  评论(0编辑  收藏  举报