对printf的输出感到好奇

时间:2013-06-12 07:52:56

标签: php string printf

您好今天我正在阅读printf中的PHPprintf超出格式化字符串。我有一个字符串。我打算像

那样格式化浮点字符串
 $str = printf('%.1f',5.3);

我知道格式%.1f的含义。这里1是小数位数。如果我echo $str喜欢

echo $str; 

输出

5.33

我可以理解输出,因为5.3是字符串,3是输出字符串的长度,它是printf的返回值。

但请参阅我的以下代码

$str = printf('%.1f', '5.34');
echo 'ABC';
echo $str;

输出

5.3ABC3

我想知道它是怎么回事?如果我们进行简单的PHP插值,它应首先输出ABC然后输出5.33,因为我们只格式化5.33而不是ABC

任何人都可以指导我这里发生了什么吗?

5 个答案:

答案 0 :(得分:5)

Place echo "<br>" after every line.You will understand how it is happening.

$str = printf('%.1f', '5.34');    output is 5.3
echo "<br>";
echo 'ABC';    output is ABC
echo "<br>";
echo $str;    output is 3

答案 1 :(得分:3)

printf 就像一个 echo 命令。它自己显示输出,并返回显示的字符串长度。

如果您想将输出变为变量,则需要添加

$str=sprintf('%.1f',5.3);
echo 'ABC';
echo $str; 
// now the output will be "ABC5.3

由于

答案 2 :(得分:1)

printf将输出格式化字符串并返回输出字符串的长度而不是格式化字符串。您应该使用sprintf代替

$str = sprintf('%.1f',5.3);

5.3ABC3

的原因
 5.3  ----------------  printf('%.1f', '5.34'); and $str  becomes 3 
 ABC  ----------------  echo 'ABC';
 3    ----------------  length of 5.3 which is $str

答案 3 :(得分:1)

$str = printf('%.1f', '5.34'); // outputs '5.3' and sets $str to 3 (the length)
echo 'ABC';                    // outputs 'ABC'
echo $str;                     // outputs the value of $str (i.e. '3')

因此

'5.3', then 'ABC' then '3'

5.3ABC3

答案 4 :(得分:1)

您自己给出了答案:printf输出格式化字符串并返回字符串的长度。

所以:

$str = printf('%.1f', '5.34'); // prints 5.3
echo 'ABC';                    // prints ABC
echo $str;                     // prints 3

总共是:5.3ABC3