美文网首页程序员
小数保留几位 DecimalFormat

小数保留几位 DecimalFormat

作者: 王黎聪 | 来源:发表于2018-04-11 20:36 被阅读818次

    小数转换我不太常用,所以随手做个小记。
    主要记的是一个类 DecimalFormat ,
    DecimalFormat是NumberFormat一个具体的子类,主要是格式化十进制数。它有各种各样的设计用于解析和格式化数字中的数字的特性区域设置,包括整数(123)、固定点编号(123.4)、科学记数法(1.23E4)、百分比(12%)和货币金额(123美元)等。


    常用到的几个需求案例

    1.保留两位的百分比数;例如:99.99%
    2.金额默认保留两位;例如:199.00¥,231,199.00元
    3.最多保留几位,最少保留几位;例如:3.141592 , 3.14, 3
    4.舍入配置 等需求


    上代码- 几个常用方法介绍

    
      //输入  5211314
      // 可以无参数构造,有参数构造 参数有语法,详见底部。参考"0.0","0.0¤","0.0%"。
        DecimalFormat df = new DecimalFormat();
      // 设置国家货币符号 参数为ISO 4217标准,如果构造参数添加‘¤’符号,参考--> 5211314¥
        df.setCurrency(Currency.getInstance("CNY"));
      // 设置最多保留几位.参考--> 5211314.00
        df.setMaximumFractionDigits(2);
      // 设置分组大小.参考--> 5,211,314
        df.setGroupingSize(3);
      // 设置乘以的倍数.参考--> 521131400
        df.setMultiplier(100);
      // 设置正数前缀,参考--> @5211314
        df.setPositivePrefix("@");
      // 设置正数后缀 但是替换掉 已有字符 参考--> 5211314@
        df.setPositiveSuffix("@");
      // 设置负数前缀,只对负数有效   参考-->@-1
        df.setNegativePrefix("@");
      // 设置负数后缀 但是替换掉 已有字符  只对负数有效  参考--> -1@
        df.setNegativeSuffix("@");
      // 设置四舍五入的模式 详见 RoundingMode 类 写的 非常详细
        df.setRoundingMode(RoundingMode.DOWN);
      // 格式化 成 想要的结果
        df.format(5211314);
    
    

    比较通用的方法

    
        /**
         * 获取格式化的double数的字符串
         * 
         * 直接截取数值 不四舍五入
         * 
         * @param num  需要被格式化的数   
         * @param sample 具体样式
         *      sample="0.00元";             效果 :    2018.99元;
         *      sample="(万元)0.00";         效果 :     (万元)2018.99;
         *      sample="0.00¥";             效果 :    2018.99¥;
         *      sample="¥0.00";             效果 :    ¥2018.99;
         *      sample="0.00%";             效果 :    201899.00%; (自动乘以100)
         * @return 格式化后的字符串
         */
        public static String getDoubleFormat(double num, String sample){
            DecimalFormat df=new DecimalFormat(sample);
            df.setGroupingSize(0);
            df.setRoundingMode(RoundingMode.DOWN);
            return df.format(num);
        }
    
        //百分比 和 金额数值 打印
        System.out.println(getDoubleFormat(0.99989,"0.00%"));//打印结果: 99.98%,自动乘以100
        System.out.println(getDoubleFormat(1,"0.00%"));//打印结果: 100.00%,自动乘以100
        System.out.println(getDoubleFormat(1.2577,"0.00 万元"));//打印结果: 1.25 万元
        System.out.println(getDoubleFormat(12577,"0.00 元"));//打印结果: 12577.00 元
        System.out.println(getDoubleFormat(12577,"¥ 0.00"));//打印结果: ¥ 12577.00
    
    

    带位分隔的格式化的double数的字符串

    
        /**
         * 获取带位分隔格式化的double数的字符串
         * (带位分隔的就比较麻烦点了)
         * 
         * 直接截取数值 不四舍五入
         * 
         * @param num 需要被格式化的数   
         * @param groupingSize 需要几位整数分隔
         * @param fractionDigits 需要保留几位小数
         * @param suffix 后缀字符
         * @return 格式化后的字符串
         */
        public static String getGroupingFormat(double num,int groupingSize, int fractionDigits,String suffix){
            DecimalFormat df=new DecimalFormat();
            df.setMaximumFractionDigits(fractionDigits);
            df.setMinimumFractionDigits(fractionDigits);
            df.setGroupingSize(groupingSize);
            df.setPositiveSuffix(suffix);
            df.setNegativeSuffix(suffix);
            df.setRoundingMode(RoundingMode.DOWN);
            return df.format(num);
        }
    
        System.out.println(getGroupingFormat(12577,3,2," 元"));//打印结果: 12,577.00 元
        System.out.println(getGroupingFormat(12577.998,3,2," 元"));//打印结果: 12,577.99 元
        System.out.println(getGroupingFormat(177.998,3,2," ¥"));//打印结果: 177.99 ¥
    
    

    控制最多保留几位,最少保留几位

    
        //最多保留几位
        df.setMaximumFractionDigits(6);
        //最少保留几位, 可以是0 就是 取整数
        df.setMinimumFractionDigits(2);
    
    

    四舍五入的模式 详见: RoundingMode
    ISO 4217标准 详见: ISO 4217

    相关文章

      网友评论

        本文标题:小数保留几位 DecimalFormat

        本文链接:https://www.haomeiwen.com/subject/ewkzhftx.html