Java协助:表格格式/ printf间距

3
这段代码困扰了我大约一个小时。基本上,我的程序的一部分任务是以表格形式显示数据。现在只剩下让输出看起来好看些的问题了。
以下是(示例)代码片段,就printf命令的格式和语法而言,一直在困扰着我:
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上运行命令时,我的输出结果如下:

enter image description here

虽然这并不会导致程序崩溃或者有什么大的问题,但是那个显示在“Total:”标头正下方的小缩进让我很烦恼。


我已经尝试了大约一个小时来使"$9999.00"的双精度/浮点值能够完美地与"Total:"标头对齐。任何帮助都将不胜感激。

简而言之 - 查看图像链接,然后查看代码。试图将位于“Total”下方右侧的数字向左推。有劳帮忙?


为什么你不这样结束它?"...%s%-20.2f%s%-20.2f%n"(去掉中间的空格)? - Tupac
1个回答

0

%s中额外放置的$会向列添加另一个字符,使其比预期的20个字符宽。因此,下一列中的字符向右移动。如果您希望pricetotal列始终包含20个字符,则可以:

  • 将每个%-20.2f减少为%-19.2f(假设%s只包含一个字符),
  • 首先生成"$99,99"字符串,如String.format("$%.2f",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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接