2013-07-23 120 views
3

我正在做一些格式化字符串的示例練習,使用format()printf()方法。 這裏是一個例子,其輸出我很困惑,請幫助。printf()輸出中的混淆

int i2= 12345; 
//Total length of the argument should be 7 and pad with zeros 
System.out.printf(">%0,7d< \N",i2); 

輸出是

>012,345< 

如果我們看到,爭論的時間是6。但是,分隔符是否也計入其長度爲 。如果不是,那麼根據我的輸出結果應該是這樣。

>001,2345< 

請幫助澄清這個疑問。

回答

3

Formatter的Javadoc頁面沒有提到解釋寬度時分組分隔符的任何特殊處理,它只是關於字符數量會談:

可選width是一個非負十進制整數,表示要寫入輸出的最小字符數。

+0

但是,格式化指令是「>%0,7d <\ N」而不是%07D,事實上格式化字符串中的逗號和全部似乎包含在Dan指出的總寬度中。請參閱下面的答案。參考Formatter的定義,其中是一個表示最小字符數的非負整數,「,」的確是一個字符。 – benz

+1

是的,'''增加了分組分隔符,丹指出,但我想你已經知道,根據你的問題。 – Keppil

+0

是的,感謝一噸Keppil。非常感謝您的詳細回覆。 – benz

1

您使用逗號和正在打印的整數,這意味着「7」是一個寬度,而不是一個精度。寬度值是指整個格式化的字符串,包括前導零,空格,逗號,小數點和負號。

+0

這是正確的丹。我用的不精確。你恰好回答我逗號和一切都包含在格式化的字符串中。萬分感謝。 – benz

0

請參閱IO Formatting幫助頁面。基本結構是following(點擊查看)。

根據該文檔:

寬度是指格式化值的最小寬度;如有必要,值爲 。默認情況下,該值左側填充空白。