这里的PHP文档指出:
如果PHP遇到一个超出整数类型界限的数字,它将被解释为浮点。此外,导致数字超出整数类型界限的操作将返回浮点值。
但是,如果运算的数字小于PHP_INT_MAX,该怎么办
请参阅以下代码片段作为示例:
$max_int = 2**31-1 ; // 2147483647
var_dump(PHP_INT_MAX === $max_int); // false
正如您所看到的,即使一个操作产生了一个有效的int值,PHP似乎也会将结果转换为float
var_dump(PHP_INT_MAX === (int) $max_int) // true
我的问题:
PHP解释器在进行任何计算之前是否将结果强制转换为浮点?
PHP不应该计算结果,然后相应地设置类型吗?(有道理吧?(
编辑:
PHP版本:7.2.1 32位
操作系统:Windows:10 x64
我正在使用XAMPP
计算$max_int = 2**31-1
时,引擎按以下步骤执行:
$tmp = 2**31;
$max_int = $tmp-1
这里$tmp
大于最大整数值,并转换为浮点数。因此,有一个浮点减法,产生一个浮点。既然它是漂浮的,就必须保持漂浮。