DecimalFormat:格式化十进制数字

NumberFormat的具体子类,用于格式化十进制数字。它具有多种功能,可以在任何语言环境中解析和格式化数字,包括支持西文,阿拉伯文或印度文数字。它还支持不同类型的数字,包括整数(“123”),定点数字(“123.4”),科学记数法(“1.23E4”),百分比(“12%”)和货币金额(“123美元” )。

DecimalFormat简单使用

//使用系统默认的格式
DecimalFormat myformat1 = new DecimalFormat("###,###.0000");
System.out.println(myformat1.format(111111123456.12));
结果:111,111,123,456.1200

DecimalFormat myformat3 = new DecimalFormat();//
myformat3.applyPattern("##,###.000");
System.out.println(myformat3.format(11112345.12345));
结果:11,112,345.123

//指数输出
DecimalFormat myformat4 = new DecimalFormat();
myformat4.applyPattern("0.000E0000");
System.out.println(myformat4.format(10000));
System.out.println(myformat4.format(12345678.345));
结果:1.000E0004   1.235E0007

//百分数输出
DecimalFormat myformat5 = null;
  try{
      myformat5 = (DecimalFormat)NumberFormat.getPercentInstance();
  }catch(ClassCastException e)
  {
   System.err.println(e); 
  }
 myformat5.applyPattern("00.0000%");
 System.out.println(myformat5.format(0.34567));
 System.out.println(myformat5.format(1.34567));
结果:34.5670%    134.5670%

//方法:只保留小数点后2位        
public static String decimal(String num){ 
//将String转换成double 
double d = (new Double(num)).doubleValue(); 
DecimalFormat df = new DecimalFormat("###.00"); 
return df.format(d)+""; 
}

1.DecimalFormat常用方法介绍

  //输入  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.setMaximumFractionDigits(6);
  //最少保留几位, 可以是0 就是 取整数
    df.setMinimumFractionDigits(2);
  // 格式化 成 想要的结果
    df.format(5211314);

2.常用方法介绍

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

1). 通用方法

/**
     * 获取格式化的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

2). 带位分隔的格式化的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 ¥

3. 参考链接
小数保留几位 DecimalFormat
在线API文档
Android中DecimalFormat的用法

你可能感兴趣的:(DecimalFormat:格式化十进制数字)