php - 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
大于最大整数值并转换为浮点数。结果是浮点减法,导致浮点数。因为它一直是浮动的,所以它必须保持浮动。
推荐阅读
- node.js - 在 AWS Lambda 后台运行任务
- python - 如何从不同的文件夹中读取图像数据?
- visual-studio - 您如何将 DbContext 搭建为预构建事件
- regex - 使用 .htaccess 在特定页面上设置标题
- r - 发现人群之间的差异
- javascript - JavaScript - updating
- r - 矩阵每行中的前 k 个值,不包括对角线
- css - 未捕获的 DOMException:无法在 'ShadowRoot' 上设置 'adoptedStyleSheets' 属性:无法采用非构造样式表
- python - Python 底图热图
- python - 选择关联表中至少有 30 个 id 实例的所有行