2017-08-15 38 views
1

我的問題如下: log(1000,10)返回3,但floor(log(1000,10))返回2。如何解決這個問題?Php日誌和樓層功能奇怪的行爲

我的phpversion是5.6.30-0 + deb8u1。

+0

有趣的:https://3v4l.org/CemOL。 – localheinz

+0

@localheinz Wtf ...你是否發現了一個bug?我的意思是,在PHP的手冊中,沒有任何關於PHP7 +的功能已經改變的文章 - http://php.net/manual/en/function.floor.php – Twinfriends

+0

@Twinfriends沒有想法,說實話! – localheinz

回答

2

From a 13 year old comment at the PHP:log documentation:

$val = 1000000 
$val2 = floor(log($val,10)) // gives a value of 5 for $val2 and not 6 as expected. 
$val2 = floor(log10($val)) // gives the correct value. 

所以,你應該用floor(log10(1000);

雖然我當然不是專家,我想在PHP5和PHP7不同的結果(如在你的問題的評論中指出)有在PHP 7中使用scalar type declaration這個新功能(嘗試使用嚴格模式來查找更多內容,例如https://3v4l.org/KVCol)。

5

因爲log(1000)是像2.9999999999999996和地板()函數將數字無條件捨去到最接近的整數

,如果你想有3個,使用圓形而不是地板

+0

正確。結果的類型仍然是浮動的,就像附加註釋一樣。 – Twinfriends

+0

我必須使用整數的正常形式的指數,所以我不能使用round(對於999,我必須返回2) – bmv

+0

您可以隨時檢查它是否真的接近下一個數字。 – sheplu

-1

浮動精度可能涉及。您可以改爲使用log10(1000)。

+0

爲什麼投票給我失望?請嘗試log10(1000)並返回一個真實的3 –