2017-04-07 19 views
3

所以这段代码在过去的一个小时左右一直在困扰着我。基本上,我的程序的一部分任务是以某种表格格式显示数据。剩下的只是让输出看起来很好,可以这么说。Java协助中的表格格式/ printf间距

这里的代码(例如)段是一直缠着我在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”双/浮点值头。任何援助将不胜感激。

tl; dr - 查看Image Link,然后查看代码。试图让数字正确的下方“Total”被推到左边。帮帮我?

+0

为什么你不结束它这样吗? “...%s%-20.2f%s%-20.2f%n”(没有中间空间)? – Tupac

回答

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));