是什么让长整数数值(16 个以上字符)在 JavaScript 中发生变异?

What makes long integer numerical values (16+ chars) to mutate in JavaScript?

有没有人可以解释为什么 JavaScript 会发生以下情况?

let x212 = 154688977320418212;
// returns 154688977320418200

let x230 = 154688977320418230;
// returns 154688977320418240

let x256 = 154688977320418256;
// returns 154688977320418240

let x257 = 154688977320418257;
// returns 154688977320418270

这是否意味着如果不将其转换为字符串就无法存储长整数值?

在JavaScript中,所有数字都是64位浮点数

尾数的大小约为 53 位,这意味着您的数字 154688977320418257 不能完全 表示为 JavaScript数字。您看到的是一个近似值,因为它是一个大于 MAX_SAFE_INTEGER 的数字(即 9007199254740991)。

如果你真的需要大数字,你可以使用像 https://github.com/peterolson/BigInteger.js.

这样的库