服务器返回前端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序列化器自动转换

相关推荐
Nanjo_FanY10 分钟前
Spring Boot 3/4 可观测落地指南
后端
PFinal社区_南丞28 分钟前
Go语言开发AI智能体:从Function Calling到Agent框架
后端·go
货拉拉技术1 小时前
货拉拉海豚平台-大模型推理加速工程化实践
人工智能·后端·架构
神奇小汤圆1 小时前
请不要自己写,Spring Boot非常实用的内置功能
后端
神奇小汤圆1 小时前
突破Netty极限:基于Java 21 FFM API手写高性能网络通信框架
后端
Java编程爱好者1 小时前
给 Spring Boot 接口加了幂等保护:Token 机制 + 结果缓存,一个注解搞定
后端
Java编程爱好者2 小时前
字节二面:Redis 能做消息队列吗?怎么实现?
后端
爱找乐子的李寻欢2 小时前
防止字符串 ID 隐式转换导致的数据越权漏洞
后端
JavaGuide2 小时前
字节二面:Redis 能做消息队列吗?怎么实现?
redis·后端
暮色妖娆丶3 小时前
不过是吃了几年互联网红利罢了,我高估了自己
java·后端·面试