即使数字小于INT_MAX,PHP也会将数字解释为浮点数

问题描述 投票:0回答:1

PHP文档here声明:

如果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

php integer-overflow
1个回答
3
投票

在计算$max_int = 2**31-1时,引擎会按步骤执行此操作:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.