Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将数字解释为浮点数,即使它们是';re小于INT_MAX_Php_Integer Overflow - Fatal编程技术网

PHP将数字解释为浮点数,即使它们是';re小于INT_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

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_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版本)的信息吗?请查看编辑