如何使用Java的printf实现输出数字的个位对齐?
Java printf数字个位对齐问题修正
错误原因
你当前的格式字符串存在两个核心问题:
%.30s是将标签文本左对齐并补空格到30字符,但不同标签长度不同(比如"Sum:"仅4字符,"Average:"有8字符),补空格的数量差异导致后续数字的起始位置不统一,自然无法实现个位对齐。- 浮点数使用
%30f时未指定小数位数,默认输出6位小数,和你期望的两位小数格式不符。
修正方案
要实现数字个位对齐,需要拆分固定宽度的布局:
- 标签部分用
%-N s:-表示左对齐,N是给标签预留的固定宽度(比如25),确保所有标签的结束位置完全一致。 - 数字部分按类型设置统一的右对齐宽度:
- 整数用
%M d:M是数字部分的固定宽度,右对齐。 - 浮点数用
%M.2f:M是数字部分的固定宽度,.2指定保留两位小数,右对齐。
- 整数用
修正后的代码示例
System.out.printf("%-25s%10d%n", "Sum:", getSum()); System.out.printf("%-25s%10.2f%n", "Average:", getAverage()); System.out.printf("%-25s%10d%n", "Difference:", getDifference()); System.out.printf("%-25s%10d%n", "Product:", getProduct()); System.out.printf("%-25s%10d%n", "Distance:", getDistance()); System.out.printf("%-25s%10d%n", "Maximum:", getMaximum()); System.out.printf("%-25s%10d%n", "Minimum:", getMinimum());
输出效果
Sum: 45 Average: 22.50 Difference: 5 Product: 500 Distance: 5 Maximum: 25 Minimum: 20
内容的提问来源于stack exchange,提问作者krames
相关产品推荐
相关产品推荐

