首页 > 解决方案 > 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

标签: phpinteger-overflow

解决方案


在计算$max_int = 2**31-1引擎时,分步执行:

$tmp = 2**31;
$max_int = $tmp-1

这里$tmp大于最大整数值并转换为浮点数。结果是浮点减法,导致浮点数。因为它一直是浮动的,所以它必须保持浮动。


推荐阅读