2012-02-24 122 views
1

當我輸入帶有零填充的整數佔位符的負參數的printf()時。零填充未應用。帶負數的PHP printf()數字填充

php > printf('%02d', -6); 
-6 

我做錯了什麼?或者它是一個錯誤?

+1

你期待什麼? '-06'? – Borealid 2012-02-24 00:56:18

+0

什麼是02表示填充'0'到長度'2',所以試試這個代替 'printf('x'<0)?' - ':'',abs( $ x));' – scibuff 2012-02-24 01:01:00

回答

3

每文檔:

墊襯被應用在整個字符串:

一個可選的填充符,說什麼字符將用於填充的結果正確的字符串大小。這可能是空格字符或0(零字符)。默認是填充空格。可以通過用單引號(')作爲前綴來指定備用填充字符。看下面的例子。

(強調我的)。

您可能需要使用標誌符,如果這是可以接受的,例如:

php > printf('%+03d', -6); 
-06 
php > printf('%+03d', 6); 
+06 
+0

完美,謝謝!我今天肯定已經閱讀了20次這個確切的文檔,但那個粗體的單詞是我所需要的。 – 2012-02-24 01:13:06

1

從技術上講,這是正確的,因爲您指定了2位數字,而減號指定了其中一個數字。如果你使用

printf('%03d', -6); 

你會得到-06。

1

的「 - 」計爲一個字符,所以你需要使用%03D。

我不認爲這是一個bug,因爲在字段中使用具有設置長度的字段時經常使用0填充,所以如果%02d生成一個包含3個字符的數字,天空可能會下降。