3。7。2格式化输出 之前我们已经了解到,可以使用标准输出流输出数值。比如,System。out。print(x),可以将数值x以它的类型所能表述的最大非0位数打印。比如 doublex100003。0; System。out。print(x);打印结果为3333。3333333333335 如果希望显示的是钱,这种显示方式就不太好了。 这个问题可以用printf来解决,Java这里的设计沿用了C语言函数库中的古老约定。例如,System。out。printf(8。2f,x); 这句代码表示,字段宽度(fieldwidth)为8个字符,精度为2个字符。也就是,结果包含一个签到的空格和7个字符,结果为3333。33。注意,这里的8值得是最小宽度,也就是如果不足8位,会在前面补空格,如果是超过8位,就正常显示。 可以为printf提供多个参数,例如 System。out。printf(Hello,s。Nextyear,youllbed,name,age); 每一个以字符开头的格式说明符(formatspecifiers)都替换为相应的参数。格式说明符末尾的转换字符(conversioncharacter)指示要格式化的数值的类型:f表示浮点数,s表示字符串,d表示十进制整数。 大写形式会生成大写字母。例如,8。2E将3333。33格式化为3。33E03,这里有一个大写的E 注释 可以使用s转换字符格式化任意对象。如果一个任意对象实现了Formattable接口,会调用这个对象的formatTo方法。否则,会调用toString方法将这个对象转换为一个字符串。 toString会在第5章讨论 接口将在第6章介绍 另外,还可以指定控制格式化输出外观的各种标志(flag)。下表列出了用于printf的标志。例如,逗号标志会增加分组分隔符。即System。out。printf(,。2f,100003。0);打印输出为3,333。33 可以使用多个标志,例如,,(。2f会使用分组分隔符,并将负数包围在括号内。 可以使用静态的String。format方法创建一个格式化的字符串而不是打印输出。 StringmessageString。format(Hello,s,Nextyear,youllbed,name,age1); 注释:在Java15中,可以使用formatted方法,这样可以少敲5个字符: StringmessageHello,s,Nextyear,youllbed。formatted(name,age1); 注释:格式化规则是特定于本地化环境的,例如,在德国,分组分隔符是点号而不是逗号。在卷2第7章中将介绍如何控制应用的国际化行为。