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

JavaScript中使用+=的for循环无法生成精确数值?原因与解决办法

问题原因

JavaScript采用IEEE 754双精度浮点数存储数值,而0.1这类十进制小数无法被精确转换为二进制浮点数——它在二进制中是无限循环的小数。当你在循环里反复累加0.1时,这些微小的精度误差会不断累积,最终导致数组中出现-9.700000000000001这类偏离预期的数值。

解决方法

方法1:用整数循环再转小数(最可靠)

避开浮点数累加的坑,改用整数作为循环变量,最后除以10得到精确的目标小数:

let array = [];
// 对应-10到10,步长0.1,整数范围就是-100到100
for (let i = -100; i <= 100; i += 1) {
  array.push(i / 10);
}
console.log({array});

这种方法从根源上消除了精度误差,生成的数值完全符合预期。

方法2:对浮点数做精度修正

如果非要用浮点数循环,可以在每次存入数组前对数值进行精度处理:

let array = [];
let i = -10;
while (i <= 10) {
  // 保留1位小数,再转成数值类型
  array.push(Number(i.toFixed(1)));
  i += 0.1;
}
console.log({array});

注意toFixed()返回的是字符串,需要用Number()转回数值。不过这种方法在极端场景下可能仍有微小误差,不如整数循环稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:01:21