所以我试图理解 JavaScript 在处理大数时的行为。考虑以下(在 Firefox 和 Chrome 中测试):
console.log(9007199254740993) // 9007199254740992
console.log(9007199254740994) // 9007199254740994
console.log(9007199254740995) // 9007199254740996
console.log(9007199254740996) // 9007199254740996
console.log(9007199254740997) // 9007199254740996
console.log(9007199254740998) // 9007199254740998
console.log(9007199254740999) // 9007199254741000
Run Code Online (Sandbox Code Playgroud)
现在,我知道为什么它会输出“错误”的数字——它试图将它们转换为浮点表示,并四舍五入到最接近的可能浮点值——但我不完全确定它为什么选择这些特定的数字。我的猜测是它试图四舍五入到最接近的“偶数”数,因为 9007199254740996 可以被 4 整除而 9007199254740994 不是,它认为 9007199254740996 更“偶数”。
javascript floating-point floating-point-precision floating-point-conversion