前后端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 分钟前
在 Windows Docker 中部署 PostgreSQL 17 + pgvector 完整指南
后端
卷无止境18 分钟前
FastAPI Guard 全解析,从概念到工程落地的实战指南
后端·python
卷无止境23 分钟前
FastAPI Users 全面解析:概念、原理与工程实战
后端·python
茶本无香25 分钟前
Java调用Shell脚本执行SQL数据库操作:从入门到实战
java·sql·shell
程序员爱钓鱼28 分钟前
Go switch 详解
后端·面试·go
Eloudy30 分钟前
ReAct 原理简介
前端·javascript·人工智能·react.js·agent·gpu
程序员爱钓鱼31 分钟前
Rust Struct结构体详解:定义自己的复杂数据类型
后端·面试·rust
风流 少年35 分钟前
Spring AI 2.0:MCP
java·后端·spring
北斗落凡尘1 小时前
LangGraph 入门实战(7)
后端·langchain