Java核心技术速学版(第3版)
上QQ阅读APP看书,第一时间看更新

1.6.2 格式化输出

你已经看到了System.out对象中的println方法,可以用于编写一行输出。此外还有一种print方法,该方法的输出不会每次输出都开始新的一行。该方法通常用于输入提示:

System.out.print("Your age: "); // Not println
int age = in.nextInt();

这样光标将会停留在提示信息之后,而不是下一行。

当你使用print或println方法打印一个小数时,除末尾的零以外的所有数字将会被显示。例如:

System.out.print(1000.0 / 3.0);

将会打印:

333.333333333333

但是,如果你想显示美元和美分,这就会是一个问题了。为了限制输出位数,可以这样使用printf方法:

System.out.printf("%8.2f", 1000.0 / 3.0);

格式化串(format string)"%8.2f"表示的含义是,以8个字段宽度(field width)和2位精度(precision)的形式打印浮点数。也就是说,最终打印输出中会包含2个前导空格和6个字符:

333.33

你还可以为printf提供多个参数。例如:

System.out.printf("Hello, %s. Next year, you'll be %d.\n", name, age);

每个以%字符开头的格式说明符(format specifier)都将被替换为相应的参数。格式说明符的末尾是转换说明符(conversion character),表示要格式化的值的类型:f表示浮点数,s表示字符串,d表示十进制整数。表1-5列出了所有转换说明符。

表1-5  格式化输出的转换说明符

图片表格

此外,你可以指定标志符来控制格式化输出的外观。表1-6列出了所有标志符。

表1-6  格式化输出标志

图片表格

例如,逗号标志可以添加分组分隔符,+ 符号会为正数添加正数符号。以下语句:

System.out.printf("%,+.2f", 100000.0 / 3.0);

将会打印

+33,333.33

你也可以使用formatted方法创建格式化字符串,而无须打印它:

String message = "Hello, %s. Next year, you'll be %d.\n".formatted(name, age);