我的問題如下: log(1000,10)
返回3
,但floor(log(1000,10))
返回2
。如何解決這個問題?Php日誌和樓層功能奇怪的行爲
我的phpversion是5.6.30-0 + deb8u1。
我的問題如下: log(1000,10)
返回3
,但floor(log(1000,10))
返回2
。如何解決這個問題?Php日誌和樓層功能奇怪的行爲
我的phpversion是5.6.30-0 + deb8u1。
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)。
因爲log(1000)
是像2.9999999999999996和地板()函數將數字無條件捨去到最接近的整數
,如果你想有3個,使用圓形而不是地板
正確。結果的類型仍然是浮動的,就像附加註釋一樣。 – Twinfriends
我必須使用整數的正常形式的指數,所以我不能使用round(對於999,我必須返回2) – bmv
您可以隨時檢查它是否真的接近下一個數字。 – sheplu
浮動精度可能涉及。您可以改爲使用log10(1000)。
爲什麼投票給我失望?請嘗試log10(1000)並返回一個真實的3 –
有趣的:https://3v4l.org/CemOL。 – localheinz
@localheinz Wtf ...你是否發現了一個bug?我的意思是,在PHP的手冊中,沒有任何關於PHP7 +的功能已經改變的文章 - http://php.net/manual/en/function.floor.php – Twinfriends
@Twinfriends沒有想法,說實話! – localheinz