当前位置: 代码迷 >> Java相关 >> java里面有个四舍五入的有关问题,偶数不好使,奇数好使
  详细解决方案

java里面有个四舍五入的有关问题,偶数不好使,奇数好使

热度:75   发布时间:2016-04-22 20:59:08.0
java里面有个四舍五入的问题,偶数不好使,奇数好使
我的代码:
public static void main(String[] args) {
DecimalFormat df =new DecimalFormat("#.00");
double num=10.105;

System.out.println(10.105 + "四舍五入以后是:"+df.format(10.105));
System.out.println(10.115 + "四舍五入以后是:"+df.format(10.115));
System.out.println(10.125 + "四舍五入以后是:"+df.format(10.125));
System.out.println(10.135 + "四舍五入以后是:"+df.format(10.135));
System.out.println(10.145 + "四舍五入以后是:"+df.format(10.145));
System.out.println(10.155 + "四舍五入以后是:"+df.format(10.155));
System.out.println(10.165 + "四舍五入以后是:"+df.format(10.165));
System.out.println(10.175 + "四舍五入以后是:"+df.format(10.175));
System.out.println(10.185 + "四舍五入以后是:"+df.format(10.185));
System.out.println(10.195 + "四舍五入以后是:"+df.format(10.195));
}

执行结果:
10.105四舍五入以后是:10.10
10.115四舍五入以后是:10.12
10.125四舍五入以后是:10.12
10.135四舍五入以后是:10.14
10.145四舍五入以后是:10.14
10.155四舍五入以后是:10.16
10.165四舍五入以后是:10.16
10.175四舍五入以后是:10.18
10.185四舍五入以后是:10.18
10.195四舍五入以后是:10.20

可以看到,如果小数点后面第二位是偶数的时候,就不是四舍五入了,而是直接截取,有木有什么解决办法啊
------解决方案--------------------
这个方法你查下API,DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。默认情况下,它使用 RoundingMode.HALF_EVEN。 
------解决方案--------------------
import java.math.BigDecimal;

public class Test14 {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(10.105 + "四舍五入以后是:"+getFormatNum(10.105));
System.out.println(10.115 + "四舍五入以后是:"+getFormatNum(10.115));
System.out.println(10.125 + "四舍五入以后是:"+getFormatNum(10.125));
System.out.println(10.135 + "四舍五入以后是:"+getFormatNum(10.135));
System.out.println(10.145 + "四舍五入以后是:"+getFormatNum(10.145));
System.out.println(10.155 + "四舍五入以后是:"+getFormatNum(10.155));
System.out.println(10.165 + "四舍五入以后是:"+getFormatNum(10.165));
System.out.println(10.175 + "四舍五入以后是:"+getFormatNum(10.175));
System.out.println(10.185 + "四舍五入以后是:"+getFormatNum(10.185));
System.out.println(10.195 + "四舍五入以后是:"+getFormatNum(10.195));

}

public static String getFormatNum(double num){
return new BigDecimal(num+"").setScale(2, BigDecimal.ROUND_HALF_UP).toString();
}

}