细节9 如我所愿——格式化小数与货币值
在生产生活和实际应用中,经常需要输出一些数字信息,如输出金额信息,并要求保留几位小数,这可以通过格式化数字来实现,在Java 中可以通过java. text 包中的DecimalFormat类来格式化数字。
在使用DecimalFormat类格式化数字时,需要有一个格式化模板,通过该模板将数字格式化为指定的格式,其中,格式化模板由一些特殊的字符组成,这些特殊字符如表5.1所示。
表5.1 构成格式化模板的特殊字符
使用DecimalFormat类格式化数字有两种方式,一种是创建DecimalFormat对象时,通过该类的构造方法指定格式化模板,然后调用format ()方法格式化指定的数值;另一种就是创建DecimalFormat对象时,不指定格式化模板,然后通过applyPattern ()方法指定格式化模板,之后再调用format ()方法格式化数值。
1.使用构造方法指定格式化模板
示例:
❶DecimalFormat myFormat = new DecimalFormat ("##, ###, ###.###"); // 创建DecimalFormat对象 ❷String output = myFormat. format (123456.789f); // 格式化数值 System. out. println (output); // 输出格式化的结果
运行本示例,程序将输出“123,456.789”。
说明
本示例在标记❶处通过DecimalFormat 类的构造方法指定格式化模板为“##, ###, ###.###”,然后在标记❷处调用format ()方法格式化数值123456.789f,之所以程序最后输出了123,456.789,是由于格式化模板“#, ###, ###.###”的前两个“#”号处没有需要格式化的数字,所以不显示0。
示例:
❶DecimalFormat myFormat = new DecimalFormat ("###, ###.##"); // 创建DecimalFormat对象 ❷String output = myFormat. format (123456.789f); // 格式化数值 System. out. println (output); // 输出格式化的结果
运行本示例,程序将输出“123,456.79”。
说明
本示例在标记❶处通过DecimalFormat类的构造方法指定格式化模板为“###, ###.##”,然后在标记❷处调用format ()方法格式化数值123456.789f,程序最后之所以输出了“123,456.79”,是由于格式化模板“###, ###.##”小数分隔符右侧比需要格式化的数值少一个“#”号,因此系统自动进行舍入处理,所以输出了“123,456.79”。
2.通过applyPattern ()方法指定格式化模板
示例:
❶DecimalFormat myFormat = new DecimalFormat (); // 创建DecimalFormat对象 ❷myFormat. applyPattern ("00,000,000.000"); // 指定格式化模板 ❸String output = myFormat. format (123456.789f); // 格式化数值 System. out. println (output); // 输出格式化的结果
运行本示例,程序将输出“00,123,456.789”。
说明
本示例在标记❶处创建了DecimalFormat类的实例,然后在标记❷处调用applyPattern ()方法指定格式化模板为“00,000,000.000”,在标记❸处调用format ()方法格式化数值123456.789f,所以程序最后输出了“00,123,456.789”,由于格式化模板“00,000,000.000”的前两个0处没有需要格式化的数字,所以显示0。
示例:
❶DecimalFormat myFormat = new DecimalFormat (); // 创建DecimalFormat对象 ❷myFormat. applyPattern ("\u00A4000,000.00"); // 指定格式化模板 ❸String output = myFormat. format (123456.789f); // 格式化数值 System. out. println (output); // 输出格式化的结果
运行本示例,程序将输出“¥123,456.79”。
说明
本示例在标记❶处创建了DecimalFormat类的实例,然后在标记❷处调用applyPattern ()方法指定格式化模板为“\u00A4000,000.00”,在标记❸处调用format ()方法格式化数值123456.789f,所以程序最后输出了“¥123,456.79”,由于格式化模板“\u00A4000,000.00”中的“\u00A4”是用于显示货币符号的,可以作为前缀使用也可以作为后缀使用,所以输出结果左侧显示了符号“¥”,小数分隔符右侧比需要格式化的数值少个0,因此系统自动进行舍入处理,所以输出了“¥123,456.79”。