2011-06-15 58 views
7

爲什麼按照34中的結果? 它似乎與八進制數字無關。帶前導零的int變量?

intval(042); 
+0

PHP文檔爲八進制數字,http://php.net/manual/en /language.types.integer.php。 Octals從0開始。 – 2011-06-15 04:18:38

+0

感謝我得到它,我計算出它=> 4 * 8 + 2 – RoboTamer 2011-06-15 04:53:01

+0

前導0會導致PHP將值視爲八進制。 – GordonM 2017-05-23 14:44:37

回答

15

但是,前導0表示許多語言中的八進制,就像這裏的情況一樣。

+0

第一個正確的答案,這也解釋了爲什麼**。 – 2011-06-15 04:18:23

0

傳遞此函數時要小心帶有前導「0」的字符串值。如果你給它「042」,那麼它會將它視爲BASE 8-9並將其轉換爲十進制值,這是默認值。

請通過this

1

它與八進制數的事,042被解釋爲八進制數42這是4 * 8 + 2 = 34

請注意,當加載PHP腳本時解析數字文字時,會發生八進制解釋。它與intval()無關,因爲這個值已經是整數,所以在這裏不做任何事情。

八路解釋只發生與數量文字,鑄造一個字符串時不爲整數:

intval(042) // == 34 
intval('042') // == 42 
(int)'042' // == 42 
1

在PHP與領先的0多家讀爲一個八進制數。

因此042被讀爲八進制數。

的INTVAL()函數將其轉換爲十進制數,它是34

因此,瀏覽器輸出爲34。