具有前导零的int变量?

12

为什么下面的表达式结果为34?
它似乎与八进制数无关。

intval(042);

PHP八进制数字文档,http://php.net/manual/en/language.types.integer.php。 八进制数以0开头。 - user456814
谢谢,我懂了,我想出来了 => 4*8+2 - RoboTamer
前导0会导致PHP将值视为八进制。 - GordonM
5个回答

18

但是在许多语言中,前导0表示八进制,这也是此处的情况。


3

这与八进制数字有关,042被解释为八进制数42,即4 * 8 + 2 = 34

请注意,八进制解释发生在加载PHP脚本时解析数字文字时。这与intval()无关,因为该值已经是整数。

只有当数字文字出现时才会发生八进制解释,而不是将字符串转换为整数时:

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

1
在PHP中,带前导0的数字被读作八进制数。因此,042被读作八进制数。intval()函数将其转换为十进制数,即34。因此,浏览器输出为34。

0

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


0
当传递一个以“0”开头的字符串值给这个函数时,请小心。如果你给它“042”,它会将它视为BASE 8 - 9并将其转换为十进制值,这是默认基数。
请查看this

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接