12

为什么下面的结果是 34?它似乎与八进制数没有任何关系。

intval(042);
4

5 回答 5

18

但在许多语言中,前导 0 确实表示八进制,就像这里的情况一样。

于 2011-06-15T04:15:41.107 回答
2

它确实与八进制数有关,042被解释为八进制数424 * 8 + 2 = 34.

请注意,在加载 PHP 脚本时解析数字文字时会发生八进制解释。它与 没有任何关系intval(),它在这里没有任何作用,因为该值已经是整数。

八进制解释只发生在数字文字上,而不是在将字符串转换为整数时:

intval(042)   // == 34
intval('042') // == 42
(int)'042'    // == 42
于 2014-08-15T11:19:28.373 回答
1

在 PHP 中,以 0 开头的数字被读取为八进制数。

所以 042 被读取为八进制数。

intval() 函数将其转换为十进制数,即 34。

所以浏览器输出是34。

于 2017-05-23T14:39:42.970 回答
0

这只是函数的定义方式。前导零是一条指令,将其解析为八进制数,类似于 0x 作为前缀表示十六进制。有关详细信息,请参阅文档

于 2011-06-15T04:17:28.657 回答
0

向此函数传递带有前导“0”的字符串值时要小心。如果你给它“042”,它会将其视为BASE 8 - 9并将其转换为十进制值,默认为十进制值。

请通过这个

于 2011-06-15T04:27:03.353 回答