格式化控制台输出
如果希望显示浮点值小数点后两位,那么可以如下编写代码:
double x = 2.0 / 3;
System.out.println("x is " + (int)(x * 100) / 100.0);
x is 0.66
但是,完成这个任务更好的方法是使用printf方法格式化输出。调用这个方法的语法是:
System.out.printf(format, item1, item2, ..., itemk)
这里的format是指一个子串和格式标志服构成的字符串。
格式标识符指定每个条目应该如何显示。这里的条目可以是数值、字符、布尔值或字符串。一个标识符是以百分号(%)开头的转换码。表1列出了一些常用的简单标识符。
表1 常用的标识符
标识符 | 输出 | 举列 |
---|---|---|
%b | 布尔值 | true或false |
%c | 字符 | ‘a’ |
%d | 十进制整数 | 200 |
%f | 浮点数 | 45.460000 |
%e | 标准科学计数法形式的数 | 4.556000e+01 |
%s | 字符串 | “Java is cool” |
下面是一个例子:
int count = 5;
double amount = 45.56;
System.out.printf("count is %d and amount is %f, count, a.ount);
显示:count是5而amount是45.560000
条目:count, amount
count → %d
amount → %f
条目与标识符必须在次序、数量和类型上匹配。例如:count的标识符应该是%f。默认情况下,浮点值显示小数点后6位。可以在标识符中指定宽度和精度,如表2中的例子所示。
表2 指定宽度和精度的例子
举例 | 输出 |
---|---|
%5c | 输出字符并在这个字符条目前面加4个空格 |
%6b | 输出布尔值,在false前加一个空格,在ture前加两个空格 |
%5d | 输出整数条目,宽度至少为5.如果该条目的数字位数小于5,就在前面加空格。如果该条目的位数大于5,则自动增加宽度 |
%10.f | 输出的浮点数宽度至少为10,包括小数点和小数点后两位。这样,给小数点前分配了7位。如果该项小数点前的位数小于7,就在数字前面加空格。如果该项小数点前的位数大于7,则自动增加宽度 |
%10.2e | 输出的浮点条目的宽度至少为10,包括小数点。小数点后两位和指数部分。如果按科学计数法显示的数字小于10,就给数前加1空格 |
%12s | 输出的字符串宽度至少为12.如果该字符串条目小于12个字符,就在该条目前加空格。如果该字符串条目多余12个字符,则自动增加宽度 |
可以使用printf方法改写在开始部分出现的,用于显示浮点数值小数点后两位的代码,如下所示:
double x = 2.0 / 3;
System.out.printf("x is %4.2f, x);//%4.2f为格式描述符;4为域宽度;2为精度;f为转换码
display x is 0.67
默认情况下,输出是右对齐的。可以在标识符中放一个负号(-),表明该条目在特点区域中的输出是左对齐的。例如,以下语句:
System.out.printf("%8d%8s%8.1f\n", 1234, "Java", 5.6);
System.out.printf("%-8d%-8s%-8.1f\n", 1234, "Java", 5.6);
显示:
8个字符 | 8个字符 | 8个字符 | |
---|---|---|---|
1 2 3 4 | J a v a | 5 . 6 | |
1 2 3 4 | J a v a | 5 . 6 |
警告 条目与标识符必须在类型上严格匹配。对应于标识符%f或%e的条目必须是浮点型值,列入:是40.0而不是40.因此,int型变量不能匹配%f或%e。
提示 使用符号%来标记标识符,要在格式字符串里输出直接量%,就要使用%%。