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

相关推荐
@我们的天空2 分钟前
【FastAPI 完整版】路由与请求参数详解(query、path、params、body、form 完整梳理)- 基于 FastAPI 完整版
后端·python·pycharm·fastapi·后端开发·路由与请求
武子康2 分钟前
大数据-211 逻辑回归的 Scikit-Learn 实现:max_iter、分类方式与多元回归的优化方法
大数据·后端·机器学习
一路向北North4 分钟前
springboot基础(85): validator验证器
java·spring boot·后端
蜗牛^^O^5 分钟前
Spark详解
后端
短剑重铸之日29 分钟前
《7天学会Redis》Day 1 - Redis核心架构与线程模型
java·redis·后端·架构·i/o多路复用·7天学会redis
努力的小郑29 分钟前
Spring 的西西弗斯之石:理解 BeanFactory、FactoryBean 与 ObjectFactory
后端·spring·面试
华仔啊30 分钟前
Java 异步调用失败导致系统崩溃?这份重试机制救了我
java·后端
SimonKing30 分钟前
基于Netty的WebSocket服务端
java·后端·程序员
UpgradeLink34 分钟前
基于 Go 打造的升级链路管理平台:upgradelink 让设备升级更简单
开发语言·后端·golang
CodeSheep1 小时前
这个老牌知名编程论坛,彻底倒下了!
前端·后端·程序员