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

关于JavaScript中Math.round()方法的数值舍入疑问

JavaScript中Math.round结果不符合预期的原因

先看测试代码:

let result;

result = 2.4999999999999998;
console.log(Math.round(result));

result = 2.4999999999999997;
console.log(Math.round(result));

出现这种结果的原因可以拆成两点来看:

  1. 双精度浮点数的存储限制
    JavaScript采用IEEE 754双精度浮点数存储数值,这种格式的精度是53位二进制有效数字,对应十进制约15-17位有效数字,但并非所有十进制小数都能被精确转换为二进制浮点数:
  • 2.4999999999999998和2.5的差值极小,小于双精度浮点数能区分的最小间隔(即Number.EPSILON,约为2.22e-16),因此JS会直接把它近似存储为2.5。
  • 2.4999999999999997和2.5的差值刚好超过这个最小间隔,所以它会被存储为一个略小于2.5的真实浮点数。
  1. Math.round的舍入规则
    Math.round的逻辑是返回最接近输入值的整数,当输入值刚好处于两个整数中间(比如2.5)时,会优先返回偶数。所以:
  • 被存储为2.5的2.4999999999999998,经过Math.round处理后得到2。
  • 略小于2.5的2.4999999999999997,经过Math.round处理后得到2。

这就是为什么两个看起来接近2.5的数,最终舍入结果都不是你预期的3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:15:52