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

为何JavaScript中超大数字取模(%)运算结果异常?

为什么JavaScript中1000000000000000000000000000001 % 10的结果是6?

核心原因:JavaScript的Number精度限制

JavaScript里的所有数字都是基于IEEE 754双精度浮点数实现的,这种格式只能精确表示范围在 -2^53 到 2^53 之间的整数。2^53 对应的十进制是 9007199254740992(约9e15),而你使用的数字 1000000000000000000000000000001(1后30个0加1)远远超出了这个精确范围。

当整数超出 2^53 时,JavaScript无法精确存储每一位数字,会自动将其近似为最接近的可表示双精度浮点数。对于你输入的这个数,近似后的实际存储值末尾数字变成了6,因此执行取模运算 %10 时,结果自然是6,而非预期的1。

验证示例

直接打印这个数字,就能看到JavaScript实际存储的近似值:

console.log(1000000000000000000000000000001);
// 输出:1000000000000000069632076800000(具体值可能因环境略有差异,但末尾绝非1)

从输出能明显看到,原始数字的最后一位1已经被近似修改,取模10的结果自然不是1。

解决办法

如果需要处理超出 2^53 的大整数,避免精度丢失,可以使用JavaScript的BigInt类型,它支持任意精度的整数运算:

console.log(1000000000000000000000000000001n % 10n);
// 输出:1n

注意BigInt数字末尾需要加n标识,运算时也必须使用BigInt类型的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:30:05