Java的四舍五入运算

背景

最近接触银行项目,发如今作金额四舍五入的时候并无传统意义上那么简单,银行为了尽可能缩减在这方面的亏损,有一个单独的银行家舍入法。java

传统的四舍五入运算

System.out.println("12.5的四舍五入值:" + Math.round(12.5));
System.out.println("-12.5的四舍五入值:" + Math.round(-12.5));

输出结果:code

12.5的四舍五入值:13
-12.5的四舍五入值:-12

缘由:orm

Math.round是在原来的数字的基础上+0.5而后向下取整。ip

银行家舍入法

舍去位的数值小于5时,直接舍去。ci

舍去位的数值大于5时,进位后舍去。form

当舍去位的数值等于5时,若5后面还有其余非0数值,则进位后舍去,若5后面是0时,则根据5前一位数的奇偶性来判断,奇数进位,偶数舍去。基础

举例说明:方法

11.556 = 11.56 ------六入im

11.554 = 11.55 -----四舍项目

11.5551 = 11.56 -----五后有数进位

11.545 = 11.54 -----五后无数,若前位为偶数应舍去

11.555 = 11.56 -----五后无数,若前位为奇数应进位

贴个示例:

public static void main(String[] args) {
	BigDecimal d = new BigDecimal(Double.toString(100000));//存款
	BigDecimal r = new BigDecimal(Double.toString(0.03));//利息
	BigDecimal i = d.multiply(r).setScale(2, RoundingMode.HALF_EVEN); 
	System.out.println("利润是:"+i);
}

输出结果:

利润是:3000.00

Java支持的四舍五入方式参数

一、 ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。

二、 ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,全部的位都要舍弃,不存在进位状况。

三、 ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。如果正数,舍入行为相似于ROUND_UP,若为负数,舍入行为相似于ROUND_DOWN。Math.round()方法就是使用的此模式。

四、 ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。如果正数,舍入行为相似于ROUND_DOWN;若为负数,舍入行为相似于ROUND_UP。

五、 HALF_UP:最近数字舍入(5进)。这是咱们最经典的四舍五入。

六、 HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。

七、 HAIL_EVEN:银行家舍入法。

附:格式化小数到几位

java.text.DecimalFormat df = new java.text.DecimalFormat(”#.00″);
df.format(你要格式化的数字);
相关文章
相关标签/搜索