2011-06-15 54 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。