标签:
一、简单的例子
1 public void testNum(){ 2 System.out.println(Math.round(12.5)); 3 System.out.println(Math.round(-12.5)); 4 } 5 6 Output: 13 7 -12
输出是由 Math.round 的四舍五入规则影响的。
二、Java中的舍入法
1.ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。
2.ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
3.ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于 ROUND_UP,若为负数,舍入行为
类似于 ROUND_DOWN。 Math.round() 方法就是使用的此模式。
4.ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于 ROUND_DOWN;若为负数,舍入行为
类似于 ROUND_UP。
5.HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。
6.HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。
7.HAIL_EVEN:银行家舍入法。舍去位的数值小于5时直接舍去,大于5时进位后舍去,等于5时若后面还有其他非0值则进位
后舍去,若5后面是0则根据5前面数字的奇偶性判断,奇数进位,偶数舍去。
银行家算法举例:
1 public static void main(String[] args) { 2 BigDecimal d = new BigDecimal(100000); //存款 3 BigDecimal r = new BigDecimal(0.001865*3); //利息 4 BigDecimal i = d.multiply(r).setScale(2,RoundingMode.HALF_EVEN); //使用银行家算法 5 6 System.out.println("季利息是:"+i); 7 } 8 Output: 9 季利息是:559.50
三、设置精度
1.使用BigDecimal
1 public void testNumberScale(){ 2 double d = 123456.7850; 3 BigDecimal bigDecimal = new BigDecimal(d); 4 double d1 = bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 5 System.out.println(d1); 6 }
这里使用BigDecimal 使用 setScale 设置精度,使用 ROUND_HALF_UP 设置舍入规则。
2.使用 DecimalFormat
1 public void testNumberScale2(){ 2 double d = 123456.7850; 3 DecimalFormat decimalFormat = new DecimalFormat("##.00"); 4 String d1 = decimalFormat.format(d); 5 System.out.println(d1); 6 }
3.使用 String.format
1 public void testNumberScale3(){ 2 double d = 123456.7850; 3 String d1 = String.format("%.2f",d); 4 System.out.println(d1); 5 }
注意 DecimalFormat 的舍入规则与 3 不同
标签:
原文地址:http://www.cnblogs.com/zhangyn/p/5377482.html