int变量有前导零?

时间:2011-06-15 04:13:40

标签: php int octal

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

intval(042);

5 个答案:

答案 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