JavaScript 的加法导致奇怪的结果

时间:2021-07-04 12:05:34

标签: javascript node.js browser

我在计算一些校验和时遇到了奇怪的现象。所以我把这个问题简化成小脚本。

% node
Welcome to Node.js v16.1.0.
Type ".help" for more information.
> console.log( ( 0x20000026c6db24 + 0x8bf8a215 ).toString( 16 ) )
200000b2bf7d38

在 Safari 和 Chrome 中。

<script>
console.log( ( 0x20000026c6db24 + 0x08bf8a215 ).toString( 16 ) )
</script>

Browser's console
200000b2bf7d38

我认为它必须是 200000b2bf7d39。请告诉我为什么这个计算结果是 200000b2bf7d38。

1 个答案:

答案 0 :(得分:2)

这是因为您使用了错误的类型。 JS Number 不能被视为定点数或浮点数。但是如此大的数字0x20000026c6db24 > Number.MAX_SAFE_INTEGER 不能安全地用于定点计算的上下文中。 但是 BigInt 可以显式使用:

(BigInt('0x20000026c6db24') + BigInt('0x8bf8a215')).toString(16) // '200000b2bf7d39'

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/BigInt