在开发中,后端经常需要处理一些大数值的 Long
类型数据(id等)。但当这些数据通过接口传递到前端时,可能会出现精度丢失的问题。
**原因:**JavaScript 的 Number
类型遵循 IEEE 754 双精度浮点数标准,只能精确表示范围在 -(2^53 - 1)
到 2^53 - 1
之间的整数(约等于 -9007199254740991
到 9007199254740991
)。这意味着,任何超过这个范围的整数在 JavaScript 中都无法精确表示。例如:
console.log(9007199254740991); // 输出:9007199254740991(准确)
console.log(9007199254740992); // 输出:9007199254740992(准确)
console.log(9007199254740993); // 输出:9007199254740992(精度丢失)
在后端(例如 Java)中,Long
类型的范围是 -2^63
到 2^63 - 1
,即 -9223372036854775808
到 9223372036854775807
。这种数值在 Java 中可以被精确表示,但当通过 JSON 传递到前端的 JavaScript 环境时,由于 JavaScript 数字精度限制,往往会出现 精度丢失