2013-11-27 45 views
1

我有一個關於如何使用printf混合多種格式的問題。在我的情況下,我試圖給一個數字一定數量的空格,以便它完全適合在表中,我試圖限制它允許的小數位數。下面是我有嘗試過的printf:使用printf混合多種格式

System.out.printf("%1s%10s%27s%26s%28s%28s1.5d", typeOCar, startingMiles, endingMiles, Distance, gallons, MPG); 

當我執行我的程序,它會顯示這樣的:

run: 
               Gas & Mileage Calculations 

Car Type   Starting Miles    Ending Miles     Distance     Gallons    Miles/Gallon 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
Toyota Sequoia  15543      15565      22      16.5   1.33333333333333331.5dBUILD SUCCESSFUL (total time: 0 seconds) 

任何幫助將不勝感激。

+0

爲什麼1.5d?你在哪裏使用%x.yf? x和y是數字嗎? –

回答

0
  1. 你的最後格式說明應一個f浮點數使用寬度和精度數字:例如,%20.5f
  2. 許多字符串說明符%xs應該是小數點說明符%xd,其中x是格式寬度。
  3. 如果進行此更改,則相應的參數應該是十進制數字,而不是字符串。
  4. 對於傳入的參數數量,您有太多的格式說明符。這只不過是基本的數學。計算您的說明符和參數。
  5. 閱讀Formatter API的所有細節。
0
import java.text.DecimalFormat; 

然後在你的代碼中使用此:

DecimalFormat fmt = new DecimalFormat("00.##"); //0 = numbers before . and # numbers after . 

,併爲任意值轉換(直接打印出來,例如這裏):

System.out.println(fmt.format(varName));