PHP 将数字解释为浮点数,即使它们小于 INT_MAX



这里的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大于最大整数值,并转换为浮点数。因此,有一个浮点减法,产生一个浮点。既然它是漂浮的,就必须保持漂浮。

相关内容

  • 没有找到相关文章

最新更新