我们都知道程序有时候需要将数字进行格式化,那什么是数字格式化呢?所谓数字格式化,就是按着指定格式得到一个字符串。
例如,假设我们希望3.141592最多保留2位小数,那么得到的格式化字符串应当是3.14;若是希望整数123456789按“千”分组,那么得到的格式化字符串应当是123,456,789;如果希望数字12.3456保留3位小数,整数部分至少要显示3位,那么得到的格式化字符串应当是012.346。
在JDK 1.5版本之前,程序需要使用java.text包中的相关类,比如:DecimalFormat类,对数字型数据进行格式化。JDK 1.5版本提供了更为方便的Formatter类,Formatter类提供了一个和C语言printf函数类似的format方法:
format(格式化模式,值列表)
该方法按着“格式化模式”返回“值列表”的字符串表示。
目前,Java已经将format方法作为了String类的静态方法,因此,程序可以直接使用String类调用format方法对数字进行格式化。
format方法中的“格式化模式”是一个用双引号括起的字符序列,也就是字符串,该字符序列中的字符由格式符和普通字符所构成。
例如:输出结果%d,%f,%d中的%d和%f是格式符号,开始的4个汉字、中间的两个逗号是普通字符,需要注意的是,不是格式符的都被认为是普通字符,同学们可以查阅Java API中的java.util.Formatter类了解更多的格式符。format方法返回的字符串就是“格式化模式”中的格式符被替换为它得到的格式化结果后的字符串,例如:
Strings=String.format(%.2f,3.141592);
那么s就是3.14 ,因为%.2f对3.141592格式化的结果是3.14。
format方法中的“值列表”是用逗号分隔的变量、常量或表达式。要保证format方法“格式化模式”中的格式符的个数与“值列表”中列出的值的个数相同,例如:
Strings=String.format(%d元%0.3f公斤%d台,123,456.777888,999);
那么,s就是123元456.778公斤999台。
format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式化“值列表”中对应的值,而“格式化模式”中的普通字符保留原样,例如,假设int型变量x和double型变量y的值分别是123和3.1415926,那么对于:
Strings=String.format(从左向右:%d,%.3f,%d,x,y,100);
那么,s就是从左向右:123,3.142,100。
如果不希望使用默认的顺序(从左向右)进行格式化,还可以在格式符前面添加索引符号:index$,例如,1$表示“值列表”中的第1个,2$表示“值列表”中的第2个,对于:
Strings=String.format(不是从左向右:%2$.3f,%3$d,%1$d,x,y,100);
那么,s就是不是从左向右:3.142,100,123。
注意:如果准备在“格式化模式”中包含普通的%,在编写代码时需要连续输入两个%,例如:
Strings=String.format(%d%%,89);
那么,s就是89%。