2014-06-22 32 views
0

我有這樣的代碼:爲什麼`%4 .`爲我的號碼增加空格?

private String padWithZeroRightToPeriod(String serverFormat, float unformattedNumber, int index) { 
    int nDigits = getNumberOfDigitsAfterPeriod(serverFormat); 
    String floatingFormat = "%4." + nDigits + "f"; 
    String formattedPrice = String.format(floatingFormat, unformattedNumber); 

unformattedNumber846叫,爲什麼結果" 846"(一個空格,然後三位數字)?

什麼是%4.是什麼意思?

+2

你看過Javadocs嗎?您是否嘗試過其他任何輸入來了解行爲? –

+0

在java文檔中找不到它。用什麼術語?字符串格式化程序沒有幫助 –

+1

你是什麼意思「沒有幫助」? [這是非常有據可查的](http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html)。 '%[$的argument_index] [標誌] [寬度] [精度] conversion'。 –

回答

2

docs for String.format是指你this documentation on format strings,它說:

的格式說明一般,性格類型和數值類型的語法如下:

%[argument_index$][flags][width][.precision]conversion

可選的argument_index是一個十進制整數,指示參數列表中參數的位置。第一個參數由「1 $」引用,第二個由「2 $」引用,等等。

可選的標誌是修改輸出格式的一組字符。有效標誌的集合取決於轉換。

可選的寬度是一個正數十進制整數,指示要寫入輸出的最小字符數。

可選精度是一個非負十進制整數,通常用於限制字符數。具體行爲取決於轉換。

所需轉換是指示參數應如何被格式化的字符。給定參數的一組有​​效轉換取決於參數的數據類型。

從你的榜樣輸出,看來getNumberOfDigitsAfterPeriod是returing 0,使您的格式字符串%4.0f。所以:

  • 它不具有參數指標(沒有$4後)
  • 它有一個寬度4
  • 它有一個精度0
  • 當然它有一個轉換f

所以846輸出爲" 846",因爲寬度是4.所討論的寬度是總計字符輸出的數量。這裏有一個不同的例子:Live Copy

public class Example { 

    public static void main(String args[]) { 
     System.out.println(String.format("%8.2f", 846.0)); 
     System.out.println(String.format("%8.2f", 42.4)); 
    } 
} 

輸出:

 846.00 
    42.40

注意,每個那些長八個字符。

+0

'它有一個寬度(4)'。 42.4的寬度是4嗎? –

+0

@ user1065869:是,寬度是*「寫入輸出的最小字符數*」(例如,總數)。但是考慮到你的輸出「​​846」'),顯然'getNumberOfDigitsAfterPeriod'返回'0'。 'String.format(「%4.0f」,42.4)''返回'「42」'(兩個空格後跟42)。 –

相關問題