1. 在实践中,有时会遇到数字格式化的需求,比如订单号的某一段必须为4位,不足的用0占位,或者输出需要带上百分号,单位,货币符号等,Java的DecimalFormat能和好的支持。
2. 实例化DecimalFormat后,并给实例对象设置格式的pattern字符串(两种方式)。
1 | DecimalFormat myFormat = new DecimalFormat(String pattern); // 带格式参数,实例化格式化器 |
1 2 | DecimalFormat myFormat = new DecimalFormat(); // 不带格式参数,实例化格式化器 myFormat.applyPattern(String pattern); // 为格式化器设置格式参数 |
3. 调用DecimalFormat对象的format()方法进行格式化操作,返回字符串。
1 | String out= myFormat.Format(double value); // 格式化数字 |
4. pattern格式化表达式说明:
1 2 3 4 5 6 7 8 9 10 | 0 :如果该位存在数字则输出该数字,如果不存在则输出0; # :如果该位存在数字则输出该数字,不存在不做任何输出; . :小数分隔符; - :负号; ,:分组分隔符; E :科学计数法中分隔位数和指数; % :放置在数字的前缀或后缀,将数字乘以100,以百分数输出; u2030:放置在数字的前缀或后缀,将数字乘以1000,以千分数输出; u00A4: 放置在数字的前缀或后缀,作为货币记号; ' : 本符号为单引号,当上述特殊符号出现在数字中时,应为特殊符号添加单引号,系统会将该特殊符号当做普通符号处理; |
5. 格式化举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public static void fun(String pattern, double value) { // DecimalFormat formater = new DecimalFormat(pattern); DecimalFormat formater = new DecimalFormat(pattern); formater .applyPattern(pattern); System.err.println(formater .format(value)); } public static void main (String []args) { fun("#,###.###", 123456.789); //123,456.789 fun("00000000.000kg", 123456.789); //00123456.789kg fun("000000.000", 123.78); // 000123.780 fun("#.#%", 0.789); // 78.9% fun("#.##", 123456.789); // 123456.79 fun("#.00u2030", 0.789); // 789.00‰ fun("#u00A4", 1234); // 1234¥ } |
6. DecimalFormat还提供对数字以逗号分段功能:
DecimalFormat myFormat = new DecimalFormat();
myFormat.setGroupingSize(3); //用逗号进行分段时,每个分段的大小,此处为3;
myFormat.setGroupingUsed(false/true); //当为false时上述设置的分组大小无效,为true时才能进行分组;
7. 分段举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public static void fun0(double value) { DecimalFormat myFormat = new DecimalFormat(); myFormat.setGroupingSize(3); //设置分段间距为3 System.err.println(myFormat.format(value)); } public static void fun1(double value) { DecimalFormat myFormat = new DecimalFormat(); myFormat.setGroupingSize(3); //设置分段间距为3 myFormat.setGroupingUsed(false); //不分段 System.err.println(myFormat.format(value)); } public static void main (String []args) { fun0(123456.789); //123,456.789 fun1(123456.789); //123456.789 } |