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

为何Math.floor(1.9)返回1,而Math.floor(1.9999999999999999)返回2?

为什么Math.floor(1.9)返回1,但Math.floor(1.9999999999999999)返回2?

这事儿本质上是JavaScript浮点数的精度限制在搞鬼,咱们一步步拆解来看:

JavaScript采用的是IEEE 754双精度浮点数标准,这种格式只能精确表示有限的十进制小数——大部分带小数的数值在转换为二进制存储时,都会变成无限循环的序列,最终只能被近似存储。

你输入的1.9999999999999999就是典型的例子:它和2.0之间的差值已经小到超出了双精度浮点数能区分的最小范围,所以在JavaScript引擎里,这个数会被直接存储为2.0。当你调用Math.floor()时,本质上是对2.0执行向下取整操作,结果自然就是2了。

咱们用代码验证一下更直观:

console.log(Math.floor(1.9)); // 输出 1
console.log(Math.floor(1.9999999999999999)); // 输出 2
// 直接判断这个数和2.0是否相等
console.log(1.9999999999999999 === 2.0); // 输出 true

如果你的业务场景需要处理高精度的小数运算,建议要么把小数转换为整数进行计算(比如把金额转成分),要么使用专门的高精度数值处理库来避免这类精度问题。

内容的提问来源于stack exchange,提问作者Biswas Khayargoli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:01:26