在前面章节我们使用 System.out.println() 方法将信息输出到控制台。该方法输出信息后,会自动添加一个回车换行符。与之对应的方法 System.out.print() 方法输出的数据不会自动添加回车换行符。
遗憾的是,这两个方法不能精确地控制数据的输出效果,即所谓的数据格式化功能。但是,从 JDK1.5 开始,引入了一个新的方法 System.out.printf(),该方法提供了增强的格式化输出功能。使用格式如下:
System.out.printf("输出格式", 输出数据列表);
例如:
public class Demo { public static void main(String[] args) { double salary = 15000.2567f; // 格式化输出结果,保留两位小数点 System.out.printf("salary=%6.2f\n", salary); } }
运行实例,输出结果如下:
salary=15000.26
其中,“输出格式”部分是一个字符串,可以包含字符串常量和一至多个格式说明符。格式说明符用于指定单个数据的输出格式,必须以“%”开头,后跟格式化输出的控制标记以及规定的输出宽度和精度等。格式说明符的基本语法如下:
%[<参数索引>$][<控制标记>][<宽度>][.<精度>]<转换符>
其中:
参数索引:指要格式化的参数序号,是可选的。
控制标记:指定打印正/负数的符号、数字前补0等等
宽度:指定整个输出数据的宽度,包含精度。例如:%10.2f,格式化 15000.2567f 数据结果为“ 15000.26”
精度:指定保留几位小数
转换符:标记格式说明的结尾且指定将被格式化数据的类型。
a:十六进制浮点数,例如:0x1.0p2
b:布尔类型,例如:true
c:字符型,例如:'H'
d:十进制整数,例如:250
e:指数形式浮点数,例如:3.14e-2
f:指定浮点数,例如:3.14
%:百分号,转义作用,例如:%
x:格式化为十六进制,例如:1ed0
+:打印正/负数的符号,例如:+3.140
-:输出数据左对齐(默认为右对齐),例如:3.14
0:在数字前补0,例如:0003.140
(:将负数括在括号内,例如:(3.140)
,:进行数据分组分隔,例如:24.335.85
#:对八进制/十六进制整数加前缀(0或0x),例如:0x4a3b
$:指定要给格式化的参数下标
<:指定(重复)格式化输出前面的数据
其中,$ 标记用于显示指定要格式化的数据序号。例如:
public class Demo { public static void main(String[] args) { System.out.printf("你好:%1$s!\n姓名:%1$s,年龄:%2$d\n", "Tom", 28); } }
运行示例,输出结果如下:
你好:Tom! 姓名:Tom,年龄:28
上面示例中,1$ 表示参数一 Tom,2$ 表示参数而 28。
而 < 标记用于指定对前面的数据再次格式化输出,例如:
public class Demo { public static void main(String[] args) { System.out.printf("十进制:%3d, 十六进制:%#<x", 78); } }
运行示例,输出结果如下:
十进制: 78, 十六进制:0x4e