2013-07-10 67 views
5

在Java中,我有以下代碼: 固定寬度的浮點數字格式

System.out.printf("%05.5f", myFloat); 

這非常適用於小於10的任何數字,但對於任何數量的10以上,小數位被修整爲5,但這不能補償小數點前的數字更長的事實。我想請執行下列操作之一:

12.3456 
1.23456 

(即,相同的位數),或:

12.34567 
2.34567 

(即,墊的空間,這樣的小數點和最後數字排隊)。

如果我能夠上班,我會很高興(兩者會更好!)。

有什麼想法?謝謝!

+0

要麼工作。 – joshlf

+1

你知道你需要的最大寬度嗎?如果是這樣,只需使用它作爲寬度而不是5. –

+0

您的意思是像「%05f」?如果是這樣,那是行不通的。我得到:'29.979748',然後'7.449038'(小數點後的位數相同,但沒有前導空格或0)。 – joshlf

回答

7

我想通了,怎麼把它做的事:

12.34567 
2.34567 

給定的格式字符串像"%x.yf",它將與最小寬度x格式,以及後小數點精度y。由於小數點前十位數和小數點本身計算爲最小寬度(x),因此寬度必須至少比精度大兩倍。特別是,如果打印的數字寬度比最小寬度寬,則它不會與相鄰的線很好地排列,因爲這些線會更短。舉例來說,如果我們嘗試打印10.1,然後1.1與3的寬度和1精度,我們將得到:

10.1 
1.1 

然而,如果我們使用的4寬度,1.1將被填充,因爲它不是的最小寬度:

10.1 
1.1 
+0

...現在你可以理解泰德霍普的評論:) –

+0

我做的:)... – joshlf

+0

我無法得到這個工作,它只是沒有填補數字我想要的方式。我結束了使用兩個string.format調用String.format(「%%% 5s」,String.format(「%2.2f」,數字))來獲得我期待的格式。 – SnellyBigoda