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

相关推荐
风雨同舟的代码笔记27 分钟前
ThreadLocal的使用以及源码分析
后端
brzhang1 小时前
把网页的“好句子”都装进侧边栏:我做了个叫 Markbox 的收藏器,开源!
前端·后端·架构
猎豹奕叔2 小时前
JD到家商品系统架构设计演进
后端
阑梦清川2 小时前
深入理解动静态库和ELF文件格式
后端
猎豹奕叔2 小时前
面试官:类中两个方法加同步锁,多线程能同时访问吗?
后端
马里奥Mario3 小时前
电商系统商品三四级页接口性能优化记录存档
后端
华农第一蒟蒻3 小时前
谈谈跨域问题
java·后端·nginx·安全·okhttp·c5全栈
绝无仅有3 小时前
面试复盘:哔哩哔哩、蔚来、字节跳动、小红书面试与总结
后端·面试·github
绝无仅有3 小时前
面试经历分享:从特斯拉到联影医疗的历程
后端·面试·github
IT_陈寒3 小时前
JavaScript性能优化:这7个V8引擎技巧让我的应用速度提升了50%
前端·人工智能·后端