You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

intval()函数实际功能是什么?为何浮点运算后转换结果异常?

问题

如下PHP代码示例中,将浮点运算得到的数值通过intval()转换为整数时,结果为int(43647)而非预期的int(43648):

$f = (float)"43.650" - 0.002;
var_dump($f);
var_dump($f*1000);
var_dump(intval($f*1000));

输出结果:

float(43.648)
float(43648)
int(43647)

请问这一现象的原因是什么?

原因分析

这是浮点数的精度特性导致的,PHP使用的是IEEE 754标准的双精度浮点数,这类浮点数无法精确表示所有十进制小数。

  • 看似是43.648的浮点数,在计算机内存里实际存储的是一个略小于43.648的近似值(比如43.647999999999996)。
  • 把这个近似值乘以1000后,得到的是一个略小于43648的数(比如43647.99999999996)。
  • intval()函数的逻辑是直接截断小数部分,只保留整数部分,所以这个略小于43648的数会被截断为43647。

而var_dump()输出浮点数时会做四舍五入处理,所以你看到的是float(43.648)和float(43648),但这并不是它在内存中的真实值。

内容的提问来源于stack exchange,提问作者Michael Kelso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:05:16