2013-06-12 34 views
0

你好,今天我在讀的printfprintf outpust一個格式化的字符串。我有一個字符串。我正要浮點字符串如對printf的輸出感到好奇

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

我知道格式化有關格式%.1f手段。這裏1是小數位數。如果我echo $str喜歡

echo $str; 

它輸出

5.33 

我能理解輸出,因爲5.3是字符串和3 outputed串的lenght這是printf返回值。

但看到我下面的代碼

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

它輸出

5.3ABC3 

我不知道它是怎麼發生的?如果我們去簡單的PHP插值它應該輸出ABC然後它應該輸出5.33因爲我們格式只有5.33而不是ABC

任何人都可以指導我這裏發生了什麼?

回答

3

的printf就像一個本身回聲 command.It顯示輸出並返回字符串的長度,其它被顯示。

,如果你想輸出到一個變量,那麼你需要添加

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

感謝

+1

+1爲了解釋比別人接受 –

1

printf would輸出一個格式化的字符串,並返回輸出的字符串的長度而不是格式化的字符串。您應該使用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 
+0

我問上面的輸出親愛的原因是什麼? –

+0

'3'是從'printf'返回的長度, – Baba

+1

+1以便很好的解釋 –

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 
+0

但是爲什麼5'.3'首先是ABC,然後是'3'?我知道機制,但根據代碼它應該是'ABC5.33'? –

+1

因爲'printf()'產生'output'(在你的情況下,值爲'5.3')以及設置一個變量值......它實際上是一個回聲本身......「__Output__格式化的字符串」... 。你正在執行printf()作爲你的第一行,所以它是第一個輸出發送到php://輸出 –

+0

+1以及解釋 –

1

您自己給出了答案:printf輸出格式化的字符串並返回字符串的長度。

所以:

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

哪個完全是:5.3ABC3

+0

+1以及解釋 –

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 
+0

+1以及解釋 –