服务器返回前端Long类型精度丢失

数据类型差异

JavaScript 里只有一种数值类型 Number,它遵循 IEEE 754 双精度 64 位浮点数标准。该标准将 64 位划分为不同部分,其中 1 位是符号位,11 位是指数位,52 位是尾数位。整数在这种存储方式下,能精确表示的最大安全整数是 2^53 - 1,也就是 9007199254740991。一旦数值超过这个范围,就无法精确表示,从而造成精度丢失。

数值范围问题

Java 等后端语言的 long 类型通常是 64 位整数,其取值范围为 -2^632^63 - 1,远大于 JavaScript 中 Number 类型能精确表示的范围。当后端返回的 long 类型数值超出了 JavaScript 的最大安全整数范围,前端在接收和处理时,就会自动将其转换为 Number 类型,这样就会丢失精度。

解决方案1

可以通过@JsonSerialize注解,这个注解会将Long类型先转换成String再进行序列化,

解决方案2

通过配置json序列化器自动转换

相关推荐
PetterHillWater7 分钟前
AI编程之CodeBuddy的小试
后端·aigc
codervibe25 分钟前
如何用 Spring Security 构建无状态权限控制系统(含角色菜单控制)
java·后端
codervibe29 分钟前
项目中如何用策略模式实现多角色登录解耦?(附实战代码)
java·后端
expect7g33 分钟前
Flink-Checkpoint-2.OperatorChain
后端·flink
大葱白菜34 分钟前
🧱 Java 抽象类详解:从基础到实战,掌握面向对象设计的核心基石
后端·程序员
SimonKing41 分钟前
颠覆传统IO:零拷贝技术如何重塑Java高性能编程?
java·后端·程序员
mCell1 小时前
为什么我们需要 `.proto` 文件
后端·微服务·架构
mit6.8242 小时前
[Meetily后端框架] AI摘要结构化 | `SummaryResponse`模型 | Pydantic库 | vs marshmallow库
c++·人工智能·后端
陈随易2 小时前
VSCode v1.102发布,AI体验大幅提升
前端·后端·程序员
生无谓2 小时前
什么是跨域,如何处理跨域
后端