A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么 333.525 被四舍了 ,而不是五入呢 ?

public static void main(String[] args)
    {
        NumberFormat nf = NumberFormat.getInstance();
        nf.setMinimumIntegerDigits(4);
        nf.setMaximumFractionDigits(2);
        System.out.println(nf.format(333.525));
        System.out.println(nf.format(333.52500001));
    }

输出:
0,333.52
0,333.53

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
本帖最后由 ysunday 于 2013-11-23 22:30 编辑

需要指定舍入模式
NumberFormat nf = NumberFormat.getInstance();
nf.setRoundingMode(RoundingMode.HALF_UP);//这个是指定四舍五入,默认是下边的5

源码NumberFormat的RoundingMode决定着处理方式,默认为 ROUND_HALF_EVEN ,  下面是几个参数的解释 :


1. ROUND_CEILING   
   如果BigDecimal是正的,则做ROUND_UP操作;如果为负,则做ROUND_DOWN操作。   
2. ROUND_DOWN   
   从不在舍弃(即截断)的小数之前增加数字。   
3. ROUND_FLOOR   
   如果BigDecimal为正,则作ROUND_UP;如果为负,则作ROUND_DOWN。   
4. ROUND_HALF_DOWN   
   若舍弃部分>.5,则作ROUND_UP;否则,作ROUND_DOWN。   
5. ROUND_HALF_EVEN   
  如果舍弃部分左边的数字为奇数,则作ROUND_HALF_UP;如果它为偶数,则作   ROUND_HALF_DOWN   。   
6. ROUND_HALF_UP   
   若舍弃部分>=.5,则作ROUND_UP;否则,作ROUND_DOWN。   
7. ROUND_UNNECESSARY   
   该“伪舍入模式”实际是指明所要求的操作必须是精确的,,因此不需要舍入操作。   
8. ROUND_UP   
   总是在非0舍弃小数(即截断)之前增加数字。

详情请看这里http://bbs.csdn.net/topics/390467107

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马