2013-12-21 28 views
0

工作例如:http://ideone.com/Ond6PY這兩個PHP方程有什麼顯着差異?

你有兩個變量,即$a = 5$b = 9

什麼是這兩個語句之間的主要差別數學?

floor(floor($a/$b) - .5); //output: -1

(int)((int)($a/$b) - .5); //output: 0

+0

猜測:'floor'向下舍入(到負無窮大),'(INT)'截斷(輪朝向0)。 – zch

+0

(int)是一個類型轉換,不是函數! – Sebi2020

+0

[這個問題]的答案答案(http://stackoverflow.com/questions/3300290/cast-to-int-vs-floor)解釋說。和zch上面的評論一樣。 – Michael

回答

3

看看你的表情的部分四捨五入。

的5/9劃分是

$a/$b = 5/9 = 0.555555556 

故見http://php.net/manual/en/function.floor.php

floor(1.5) = 1 
floor(-1.5) = -2 

然後

floor(floor($a/$b) - .5) = floor(floor(0.555555556)) = floor(0 - .5) = floor(-.5) = -1 

和第二殼體 看到http://www.php.net/intval

(int) 4.32 = 4 

然後

(int)((int)($a/$b) - .5) = (int)((int)(0.555555556) - .5) = (int)(0 - .5) = int(-0.5) = 0; 
+0

這是錯誤的。這不是INTVAL,這類型轉換:看這裏!:http://php.net/manual/de/language.types.type-juggling.php – Sebi2020

+0

@ Sebi2020權,儘管這不是「INTVAL」,舍入算法是相同。我使用的鏈接,因爲有php.net四捨五入的解釋。如果你有更好的一個,請編輯答案。 –

+0

顯然我不是。我爲我的答案得到了兩個讚譽。 – Sebi2020

-2

(INT)是一個類型轉換,你會得到一個整數例如2,3,5等地板下降。

因此,與(int)((int) 5/9)-0.5)你:

0 - 0(0.56666666)= 0

(int)是不是一個功能!看看這裏:Type Casting - PHP DOC

相關問題