当我为带有零填充的整数占位符输入带有负参数的printf()时。未应用零填充。
php > printf('%02d', -6);
-6
我做错什么了吗?还是一个bug?
每个文档:
- http://www.php.net/manual/en/function.sprintf.php
填充应用于整个字符串:
一个可选的填充说明符,说明将使用哪个字符将结果填充到字符串大小的右侧。这可能是一个空格字符或0(零字符)。默认情况是使用空格填充。可以通过在替换填充字符前面加一个单引号(')来指定该字符。请参阅以下示例。
(重点是我的)。
如果可以接受,您可能需要使用符号说明符,例如:
php > printf('%+03d', -6);
-06
php > printf('%+03d', 6);
+06
从技术上讲,这是正确的,因为您指定了两个数字,减号代表其中一个数字。如果您使用
printf('%03d', -6);
你会得到-06。
"-"算作一个字符,因此需要使用%03d。
我不认为这是一个错误,因为在处理具有固定长度(如字符)的字段时经常使用0填充,所以如果%02d生成一个包含3个字符的数字,天空可能会塌下来。