为什么以下结果是34? 它似乎与八进制数没有任何关系。
intval(042);
答案 0 :(得分:18)
但前导0表示许多语言中的八进制,就像这里的情况一样。
答案 1 :(得分:1)
它与八进制数有关,042
被解释为八进制数42
,即4 * 8 + 2 = 34
。
请注意,在加载PHP脚本时解析数字文字时会发生八进制解释。它与intval()
无关,intval(042) // == 34
intval('042') // == 42
(int)'042' // == 42
在此处没有任何作用,因为该值已经是整数。
八进制解释只发生在数字文字中,而不是在将字符串转换为整数时发生:
{{1}}
答案 2 :(得分:1)
在PHP中,前导0的数字被读作八进制数。
因此042被读作八进制数。
intval()函数将其转换为十进制数,即34。
因此浏览器输出为34。
答案 3 :(得分:0)
这就是函数的定义方式。前导零是指令将其解析为八进制数,类似于0x作为前缀如何表示十六进制。请参阅the documentation for more information。
答案 4 :(得分:0)
向此函数传递带前导“0”的字符串值时要小心。如果你给它“042”那么,它会把它当作BASE 8 - 9并将其转换为十进制值,默认情况下是基数。
请浏览this