在开发中,后端经常需要处理一些大数值的 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 数字精度限制,往往会出现 精度丢失 的问题。
典型场景
当后端返回一个 ID 值 1234567890123456789,前端可能会收到 1234567890123456000,这样就导致了数据的错误。

最低0.47元/天 解锁文章
1891

被折叠的 条评论
为什么被折叠?



