2017-04-07 92 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));