PHP将数字解释为浮点数,即使它们是';re小于INT_MAX
PHP文档说明: 如果PHP遇到一个超出整数类型边界的数字,它将被解释为浮点。此外,导致数字超出整数类型边界的操作将返回浮点值 但是如果一个操作的结果小于PHP\u INT\u MAX怎么办? 请参见以下代码片段作为示例:PHP将数字解释为浮点数,即使它们是';re小于INT_MAX,php,integer-overflow,Php,Integer Overflow,PHP文档说明: 如果PHP遇到一个超出整数类型边界的数字,它将被解释为浮点。此外,导致数字超出整数类型边界的操作将返回浮点值 但是如果一个操作的结果小于PHP\u INT\u MAX怎么办? 请参见以下代码片段作为示例: $max_int = 2**31-1 ; // 2147483647 var_dump(PHP_INT_MAX === $max_int); // false 如您所见,即使当一个操作产生一个有效的int值时,PHP似乎也会将结果转换为float var_dump(PHP
$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
大于最大整数值,并转换为浮点数。因此,存在一个浮点减法,从而产生一个浮点。因为它是浮动的,所以它必须保持浮动。计算时,$max_int=2**31-1
发动机分步骤执行此操作:
$tmp = 2**31;
$max_int = $tmp-1
此处,
$tmp
大于最大整数值,并转换为浮点数。因此,存在一个浮点减法,从而产生一个浮点。因为它是浮点数,所以它必须保持浮点数。你知道PHP\u INT\u MAX
的值是多少吗?@FatalError,我不确定对于较小的整数是否会发生这种情况。请看这里:你能提供更多关于发生这种情况的环境(操作系统,PHP版本)的信息吗?请看编辑你知道PHP\u INT\u MAX
的值是多少吗?@FatalError,我不确定较小整数的情况是否如此。请看这里:你能提供更多关于发生这种情况的环境(操作系统,PHP版本)的信息吗?请查看编辑