我的代码:
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();
}
}