前后端Long类型ID精度丢失问题

Java 的 Long 类型可以表示**-2^63** 到**2^63-1** 的整数

JavaScript 的 Number 类型是基于 IEEE 754 双精度浮点数标准,只能安全表示 -2^53 到 2^53 之间的整数。

前端接收到的 JSON 中 userId: 1975534353465823200(数字格式),JavaScript 将其解析为 Number 类型,超出精度范围,精度丢失,变成 1975534353465823234

安全整数范围-90071992547409919007199254740991

超出范围的数字会丢失精度

比如:

javascript 复制代码
// JavaScript 安全整数
console.log(Number.MAX_SAFE_INTEGER);  // 9007199254740991

// 超出安全范围的数字
const id = 1975534353465823200;
console.log(id);  // 1975534353465823234  ← 最后几位发生变化!

解决方法:

后端序列化时转为字符串,在所有返回给前端的 VO 类中,对 Long 类型的 ID 字段添加注解:

javascript 复制代码
/**
  *  使用字符串序列化避免前端精度丢
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
相关推荐
老华带你飞3 分钟前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·海鲜商城购物系统
2401_837088508 分钟前
Redisson的multilock原理
java·开发语言
x***B41113 分钟前
React安全编程实践
前端·安全·react.js
今天你TLE了吗14 分钟前
Stream流学习总结
java·学习
D***t13128 分钟前
前端微服务案例
前端
哀木40 分钟前
诶,这么好用的 mock 你怎么不早说
前端
⑩-1 小时前
基于Redis Lua脚本的秒杀系统
java·redis
Lear1 小时前
UniApp PDF文件下载与预览功能完整实现指南
前端
dyw081 小时前
如何通过xshell实现建立反向隧道,通过云服务器的访问本地服务
后端
Heo1 小时前
关于XSS和CSRF,面试官更喜欢这样的回答!
前端·javascript·面试