大家好 我是心安君 这是我在博客园的第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中所有的的舍入模式 希望大家有所收获