黑马程序员技术交流社区

标题: java.text.NumberFormat 格式化数值 四舍五入问题, 求解 [ [打印本页]

作者: che201311    时间: 2013-11-23 22:01
标题: java.text.NumberFormat 格式化数值 四舍五入问题, 求解 [
为什么 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
作者: ysunday    时间: 2013-11-23 22:28
本帖最后由 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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2