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

JavaScript中const变量赋值超大数字为何被舍入?溢出机制解析

数字被舍入的原因

JavaScript的Number类型基于IEEE 754双精度浮点数标准实现,用64位存储空间表示数值:1位符号位、11位指数位、52位尾数位(额外隐含1位最高位的1)。这种存储方式决定了它能精确表示的整数范围是-(2^53 - 1)到2^53 - 1,这个范围的上限就是9007199254740991(即Number.MAX_SAFE_INTEGER)。

你输入的90071992547419999992远超这个安全整数上限,JavaScript无法用64位浮点数精确存储它,只能自动将其近似为最接近的可表示浮点数,最终就出现了舍入后的结果90071992547420000000。

JavaScript的溢出处理机制
  • 整数精度丢失:当整数超出Number.MAX_SAFE_INTEGER或低于Number.MIN_SAFE_INTEGER时,相邻的多个整数会对应同一个浮点数表示,此时无法精确区分这些整数。比如9007199254740992和9007199254740993在JavaScript中会被存储为同一个值。
  • 浮点数溢出/下溢:
    • 当数值大到超过Number.MAX_VALUE(约1.7976931348623157e+308)时,会被转换为Infinity(正无穷);
    • 当数值小到低于Number.MIN_VALUE(约5e-324)时,会被转换为0。
  • 大整数的精确处理方案:如果需要精确操作超出安全范围的大整数,可以使用JavaScript的BigInt类型——在数字末尾加n,或者用BigInt()构造函数创建:
    const a = 90071992547419999992n;
    console.log(a); // 输出 90071992547419999992n
    console.log(typeof a); // 输出 bigint
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:55:24