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

相关推荐
Java水解3 分钟前
Java基础------真实大厂面试题汇总(含答案)
java·后端·面试
L.EscaRC6 分钟前
面向 Spring Boot 的 JVM 深度解析
jvm·spring boot·后端
Undoom13 分钟前
构建高可靠 OpenEuler 运维体系:从虚拟化部署到 Systemd 自动化核心实践
后端
澪贰13 分钟前
云原生基石的试金石:基于 openEuler 部署 Docker 与 Nginx 的全景实录
后端
oak隔壁找我17 分钟前
SpringBoot Starter 进阶教程
java·后端·架构
sp4218 分钟前
Java 统一文件上传业务组件
后端
10x101 小时前
# Docker 使用笔记:重新理解镜像、容器与数据持久化
后端
Rover.x1 小时前
Spring国际化语言切换不生效
java·后端·spring
IT_陈寒2 小时前
Redis 7个性能优化技巧,让我们的QPS从5k提升到20k+
前端·人工智能·后端