最近接触银行项目,发如今作金额四舍五入的时候并无传统意义上那么简单,银行为了尽可能缩减在这方面的亏损,有一个单独的银行家舍入法。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
一、 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(你要格式化的数字);