Tabular Format / printf Spacing in Java 求助
Tabular Format / printf Spacing in Java Assistance
所以这段代码在过去一个小时左右一直困扰着我。基本上,我程序的部分任务是以表格格式显示数据。唯一剩下的就是让输出看起来不错,可以这么说。
这是一段(示例)代码,在 printf 命令的 formatting/syntax 方面一直困扰着我:
System.out.printf("%-20s %-20s %-20s %-20s %-20s%n",
"Part #:", "Description:", "Number Sold:", "Price:", "Total:");
System.out.println
("---------------------------------------------------------------------------------------------------------------");
System.out.printf("%-20s %-20s %-20d %s%-20.2f %s%-20.2f%n",
"2304E", "Power Drill", 20, "$",99.99, "$",100*99.99);
事情是,一旦我尝试 运行 NetBeans 上的命令,我的输出似乎得到了这个:
虽然这不完全是 program-breaking 也不是什么大问题,但 Total:
header 正下方数字上的小缩进让我很烦。
在过去一个小时左右的时间里,我一直在努力让“$9999.00”double/float 值与 "Total:" header 完全对齐。如有任何帮助,我们将不胜感激。
tl;dr - 查看图像 Link,然后查看代码。试图将 "Total" 下方的数字推到左侧。帮忙?
%s
中的额外 $
正在向您的列添加另一个字符,这使得它比预期的 20 个字符更宽。因为下一列中的字符向右移动。如果您希望 price
和 total
列始终包含 20 个字符,您可以
- 将每个
%-20.2f
减少到 %-19.2f
(假设 %s
只包含一个字符),
- 首先像
String.format("$%.2f",99.99)
一样生成 ",99"
字符串并将其用作 %-20s
的参数(将替换 %s%-20.2f
)。
所以你的代码看起来像
System.out.printf("%-20s %-20s %-20d %s%-19.2f %s%-19.2f%n",
"2304E", "Power Drill", 20, "$",99.99, "$",100*99.99);
或
System.out.printf("%-20s %-20s %-20d %-20s %-20s%n",
"2304E", "Power Drill", 20, String.format("$%.2f",99.99), String.format("$%.2f",100*99.99));
所以这段代码在过去一个小时左右一直困扰着我。基本上,我程序的部分任务是以表格格式显示数据。唯一剩下的就是让输出看起来不错,可以这么说。
这是一段(示例)代码,在 printf 命令的 formatting/syntax 方面一直困扰着我:
System.out.printf("%-20s %-20s %-20s %-20s %-20s%n",
"Part #:", "Description:", "Number Sold:", "Price:", "Total:");
System.out.println
("---------------------------------------------------------------------------------------------------------------");
System.out.printf("%-20s %-20s %-20d %s%-20.2f %s%-20.2f%n",
"2304E", "Power Drill", 20, "$",99.99, "$",100*99.99);
事情是,一旦我尝试 运行 NetBeans 上的命令,我的输出似乎得到了这个:
虽然这不完全是 program-breaking 也不是什么大问题,但 Total:
header 正下方数字上的小缩进让我很烦。
在过去一个小时左右的时间里,我一直在努力让“$9999.00”double/float 值与 "Total:" header 完全对齐。如有任何帮助,我们将不胜感激。
tl;dr - 查看图像 Link,然后查看代码。试图将 "Total" 下方的数字推到左侧。帮忙?
%s
中的额外 $
正在向您的列添加另一个字符,这使得它比预期的 20 个字符更宽。因为下一列中的字符向右移动。如果您希望 price
和 total
列始终包含 20 个字符,您可以
- 将每个
%-20.2f
减少到%-19.2f
(假设%s
只包含一个字符), - 首先像
String.format("$%.2f",99.99)
一样生成",99"
字符串并将其用作%-20s
的参数(将替换%s%-20.2f
)。
所以你的代码看起来像
System.out.printf("%-20s %-20s %-20d %s%-19.2f %s%-19.2f%n",
"2304E", "Power Drill", 20, "$",99.99, "$",100*99.99);
或
System.out.printf("%-20s %-20s %-20d %-20s %-20s%n",
"2304E", "Power Drill", 20, String.format("$%.2f",99.99), String.format("$%.2f",100*99.99));