java保留小数点后四舍五入的问题
2017-10-11 14:54
369 查看
在Java中使用一些方法进行四舍五入会出现和预期不同的结果,这是因为这些方法使用的原则实际为:四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。
1.四舍六入五考虑时出现五的情况
1.四舍六入五考虑时出现五的情况
double f=9.545d; System.out.println(new BigDecimal(f).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); System.out.println(new java.text.DecimalFormat("#.00").format(f)); System.out.println(); f=9.555d; System.out.println(new BigDecimal(f).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); System.out.println(new java.text.DecimalFormat("#.00").format(f)); System.out.println(); f=9.5551d; System.out.println(new BigDecimal(f).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); System.out.println(new java.text.DecimalFormat("#.00").format(f)); 运行结果: 9.54 9.54 9.55 9.55 9.56 9.562.四舍五入时出现五的情况
double f=9.545d; System.out.println(String.format("%.2f", f)); System.out.println(Math.round(f*100)*0.01); System.out.println(); f=9.555d; System.out.println(String.format("%.2f", f)); System.out.println(Math.round(f*100)*0.01); System.out.println(); f=9.5551d; System.out.println(String.format("%.2f", f)); System.out.println(Math.round(f*100)*0.01); 运行结果: 9.55 9.55 9.56 9.56 9.56 9.56所以,从上边运行的情况来看,如果需要严格遵守四舍五入,需要使用第二种情况才可以。(ps:这里顺便提一下,js中使用toFixed其实是四舍六如五考虑的情况,如果希望严格的四舍五入,可以使用(Math.round(a*100)/100).toFixed(2)。但是mysql的ROUND方法却是四舍五入的)
相关文章推荐
- java double保留小数点的零的问题,java保留小数点问题
- java保留小数点后两位的有关问题
- Java小数点位数保留问题
- java中double类型数组保留小数点后位数问题!!!!!
- java中double类型变量保留小数点后两位的问题
- java中double类型数组保留小数点后位数问题!!!!!
- Java小数点保留问题
- java中小数点的保留问题
- Oracle小数点保留的问题的的4个处理方案
- QT小数点保留问题
- 数值保留小数点两位,但同时去除小数点后多余0 的 javascript、java实现
- java 四舍五入 保留小数点后任意位
- java保留小数点后两位
- 小数点后几位的保留问题
- java保留两位小数问题:
- JAVA除法保留小数点后两位的两种方法 - 大山里的人... - ITeye技术网站
- java保留两位小数问题
- java处理保留小数点后几位
- JAVA除法保留小数点后两位的方法
- java保留两位小数问题