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

JavaScript浮点数存储疑问:为何可直接赋值0.3而非近似值?

JavaScript中0.3赋值的真相

其实var blah = .3时,JavaScript存储的依然是0.3的二进制浮点数近似值,你看到的“直接赋值为0.3”只是引擎做了显示优化,核心原因有两点:

  • 存储本质:0.3仍以近似值存储
    ECMAScript采用IEEE 754双精度浮点数标准,0.3无法用二进制有限小数精确表示,内存里实际存储的是最接近0.3的二进制浮点数,对应的十进制展开是类似0.299999999999999988897769753748434595763683319091796875的数值。

  • 显示优化:引擎自动舍入为最短合法十进制数
    当你输出变量或转换为字符串时,JavaScript引擎不会直接输出内存中的完整近似值,而是会寻找最短的十进制数——这个十进制数转换为二进制浮点数后,刚好等于内存里存储的近似值。0.3就是满足这个条件的最短十进制数,所以引擎会显示0.3,而非冗长的近似值。

你可以通过代码验证这一点:

var blah = 0.3;
console.log(blah.toPrecision(20)); // 输出 0.29999999999999998890

至于0.1+0.2会显示0.30000000000000004,是因为0.1和0.2的近似值相加后,得到的结果对应的最短十进制数不是0.3,而是那个更长的数值,所以引擎就如实显示了该结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:53:12