加法异常问题:是否与内存分配有关?
问题原因及解决办法
这个异常和内存分配无关,根源是JavaScript的Number类型精度限制。
JavaScript里的Number是64位双精度浮点数,它能精确表示的整数范围是 -2^53 到 2^53(也就是 -9007199254740992 到 9007199254740992)。
你计算的数值:4 * 10**16 是 40000000000000000,加上 5390195186705543 后,正确结果是 45390195186705543,但这个数已经超出了Number能精确表示的整数范围。当数值超出这个范围时,JavaScript会把它舍入到最近的可存储的浮点数,所以最终输出变成了 45390195186705544。
如果要处理这类超大整数运算,改用JavaScript的BigInt类型即可,只需要在数值末尾加上n:
console.log( (4n * 10n**16n) + 5390195186705543n ) // 输出: 45390195186705543n
内容的提问来源于stack exchange,提问作者gandelino
相关产品推荐
相关产品推荐

