DecimalFormat类也是Format的一个子类,主要作用是格式化数字。当然,在格式化数字时要比直接使用NumberFormat更加方便,因为可以直接指定按用户自定义的方式进行格式化操作,与SimpleDateFormat类似,如果要进行自定义格式化操作,则必须指定格式化操作的模板,此模板如表11-13所示。
表11-13 DecimalFormat格式化模板
序号 | 标 记 | 位 置 | 描 述 |
1 | 0 | 数字 | 代表阿拉伯数字,每一个0表示一位阿拉伯数字, 如果该位不存在则显示0 |
2 | # | 数字 | 代表阿拉伯数字,每一个#表示一位阿拉伯数字, 如果该位不存在则不显示 |
3 | . | 数字 | 小数点分隔符或货币的小数分隔符 |
4 | - | 数字 | 代表负号 |
5 | , | 数字 | 分组分隔符 |
6 | E | 数字 | 分隔科学计数法中的尾数和指数 |
7 | ; | 子模式边界 | 分隔正数和负数子模式 |
8 | % | 前缀或后缀 | 数字乘以100并显示为百分数 |
9 | \u2030 | 前缀或后缀 | 乘以1000并显示为千分数 |
10 | ¤ \u00A4 | 前缀或后缀 | 货币记号,由货币号替换。如果两个同时出现, 则用国际货币符号替换;如果出现在某个模式中 ,则使用货币小数分隔符,而不使用小数分隔符 |
11 | , | 前缀或后缀 | 用于在前缀或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为 "#123"。要创建单引 号本身,则连续使用两个单引号,例如"# o''clock" |
下面通过实例代码说明以上格式化模板的使用。
1 DecimalFormat df = new DecimalFormat();
2 double data = 1234.56789;
3 System.out.println("格式化之前的数字: " + data);
4 String style = "0.0";//定义要显示的数字的格式
5 df.applyPattern(style);// 将格式应用于格式化器
6 System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
7 style = "00000.000 kg";//在格式后添加诸如单位等字符
8 df.applyPattern(style);
9 System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
10 // 模式中的"#"表示如果该位存在字符,则显示字符,如果不存在,则不显示。
11 style = "##000.000 kg";
12 df.applyPattern(style);
13 System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
14 // 模式中的"-"表示输出为负数,要放在最前面
15 style = "-000.000";
16 df.applyPattern(style);
17 System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
18 // 模式中的","在数字中添加逗号,方便读数字
19 style = "-0,000.0#";
20 df.applyPattern(style);
21 System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
22 // 模式中的"E"表示输出为指数,"E"之前的字符串是底数的格式,
23 // "E"之后的是字符串是指数的格式
24 style = "0.00E000";
25 df.applyPattern(style);
26 System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
27 // 模式中的"%"表示乘以100并显示为百分数,要放在最后。
28 style = "0.00%";
29 df.applyPattern(style);
30 System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
31 // 模式中的"\u2030"表示乘以1000并显示为千分数,要放在最后。
32 style = "0.00\u2030";
33 //在构造函数中设置数字格式
34 DecimalFormat df1 = new DecimalFormat(style);
35 //df.applyPattern(style);
36 System.out.println("采用style: " + style + "格式化之后: " + df1.format(data));
格式化之前的数字: 1234.56789
采用style: 0.0格式化之后: 1234.6
采用style: 00000.000 kg格式化之后: 01234.568 kg
采用style: ##000.000 kg格式化之后: 1234.568 kg
采用style: -000.000格式化之后: -1234.568
采用style: -0,000.0#格式化之后: -1,234.57
采用style: 0.00E000格式化之后: 1.23E003
采用style: 0.00%格式化之后: 123456.79%
采用style: 0.00‰格式化之后: 1234567.89‰