java格式化各类数字显示

项目在输出数字时,有时需要给数字配上单位,有时需要数字具有一定的精度,也有时需要用科学计数法表示数字。 
 

数字分组显示案例:

 public static boolean isNumber(String str){
        if(!isEmpty(str) && Pattern.matches("[0-9.]+",str)){
            return true;
        }
        return false;
    }
    public static String formatMony(String mony){
        DecimalFormat df = new DecimalFormat();
        String s = mony.indexOf(".")>0?mony.substring(0,mony.indexOf(".")):mony;
        if(isNumber(mony) && s.length()>3 && mony.indexOf(".")>0){
            df.applyPattern("0,000.0###");
            double m = Double.parseDouble(mony);
            return df.format(m);
        }else if (isNumber(mony) && mony.indexOf(".")>0){
            df.applyPattern("0.0###");
            return df.format(Double.parseDouble(mony));
        }else if(isNumber(mony) && mony.indexOf(".")<0 && s.length()>3){
            df.applyPattern("#,###");
            return df.format(Double.parseDouble(mony));
        }else{
            return convertNull(mony);
        }
    }
技术剖析:

  1. java.text.DecimalFormat类专门用于格式化数字。
  2. 需要为DecimalFormat提供格式化模式Pattern。通过构造方法或者DecimalFormatapplyPattern方法设置模式。Pattern的类型为字符串。
  3. 调用DecimalFormatformat实例方法,参数为待格式化的数字,该方法使用DecimalFormat对象的pattern对参数进行格式化。

import java.text.DecimalFormat;
 
public class TestDecimalFormat {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat();
double data = 1203.405607809;
System.out.println("格式化之前:" + data);
 
String pattern = "0.0";//1203.4
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
// 可以在模式后加上自己想要的任何字符,比如单位
pattern = "00000000.000kg";//00001203.406kg
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
//#表示如果存在就显示字符,如果不存在就不显示,只能用在模式的两头
pattern = "##000.000kg";//1203.406kg
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
//-表示输出为负数,必须放在最前面
pattern = "-000.000";//-1203.406
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
//,是分组分隔符 :输出结果12,03.41
pattern = "-0,00.0#";//-12,03.41
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
//E表示输出为指数,”E“之前的字符串是底数的格式,之后的是指数的格式。
pattern = "0.00E000";//1.20E003
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
//%表示乘以100并显示为百分数,要放在最后
pattern = "0.00%";//120340.56%
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
//"\u2030"表示乘以1000并显示为千分数,要放在最后
pattern = "0.00\u2030";//203405.61‰
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
//"\u00A4"货币符号,要放在两端*****1203.41¥
pattern = "0.00\u00A4";//1203.41¥
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
//'用于在前缀或或后缀中为特殊字符加引号,要创建单引号本身,请连续使用两个单引号:"# o''clock"。 
pattern = "'#'#" ;//#1203
// pattern = "'#'" ;//#1203
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
 
pattern = "# o''clock" ;//1203 o'clock
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
//''放在中间或后面单引号就显示在最后,放在最前面单引号就显示在最前
// pattern = "# o''clock.000" ;//1203.406 o'clock
// pattern = "# .000o''clock";//1203.406 o'clock
// pattern = "# .000''";//1203.406 '
// pattern = "# .''000";//1203.406 '
pattern = "''# .000";//'1203.406 
df.applyPattern(pattern);
System.out.println("采用" + pattern + "模式格式化后:" + df.format(data));
}
}

输出结果为:

格式化之前:1203.405607809
采用0.0模式格式化后:1203.4
采用00000000.000kg模式格式化后:00001203.406kg
采用##000.000kg模式格式化后:1203.406kg
采用-000.000模式格式化后:-1203.406
采用-0,00.0#模式格式化后:-12,03.41
采用0.00E000模式格式化后:1.20E003
采用0.00%模式格式化后:120340.56%
采用0.00‰模式格式化后:1203405.61‰
采用0.00¤模式格式化后:1203.41¥
采用'#'#模式格式化后:#1203
采用# o''clock模式格式化后:1203 o'clock
采用''# .000模式格式化后:'1203.406

分析:

  1.  可以在java.text.DecimalFormat的构造方法中制定模式(pattern),也可以使用applyPattern方法设置格式模式。
  2.  格式模式有特定的规则,不太的字符代表不同的意思,在使用中需要自己设计格式的模式。常用的模式有:“.”、“-”、“#”、“%”、“\u2030”、“,”、“E”、“0”。关于这些模式的具体含义在程序注释中有详细的介绍,也可以参阅JDK的帮助文档。


你可能感兴趣的:(jdk,DecimalFormat,数字格式显示,数字科学计数显示)