为什么下面的结果是 34?它似乎与八进制数没有任何关系。
intval(042);
但在许多语言中,前导 0 确实表示八进制,就像这里的情况一样。
它确实与八进制数有关,042
被解释为八进制数42
即4 * 8 + 2 = 34
.
请注意,在加载 PHP 脚本时解析数字文字时会发生八进制解释。它与 没有任何关系intval()
,它在这里没有任何作用,因为该值已经是整数。
八进制解释只发生在数字文字上,而不是在将字符串转换为整数时:
intval(042) // == 34
intval('042') // == 42
(int)'042' // == 42
在 PHP 中,以 0 开头的数字被读取为八进制数。
所以 042 被读取为八进制数。
intval() 函数将其转换为十进制数,即 34。
所以浏览器输出是34。
这只是函数的定义方式。前导零是一条指令,将其解析为八进制数,类似于 0x 作为前缀表示十六进制。有关详细信息,请参阅文档。
向此函数传递带有前导“0”的字符串值时要小心。如果你给它“042”,它会将其视为BASE 8 - 9并将其转换为十进制值,默认为十进制值。
请通过这个