前后端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;
相关推荐
Lisonseekpan4 小时前
Java Caffeine 高性能缓存库详解与使用案例
java·后端·spring·缓存
用户1456775610374 小时前
干净的图片批量处理,处理速度飞快
前端
柳贯一(逆流河版)4 小时前
Spring Boot Actuator+Micrometer:高并发下 JVM 监控体系的轻量化实践
jvm·spring boot·后端
用户1456775610374 小时前
亲测好用!简单实用的图片尺寸调整工具
前端
索西引擎4 小时前
npm、yarn、pnpm
前端·npm·node.js
SXJR4 小时前
Spring前置准备(七)——DefaultListableBeanFactory
java·spring boot·后端·spring·源码·spring源码·java开发
Moonbit5 小时前
MoonBit高校行 | 中大、深技大、深大、港科广回顾
后端·开源·编程语言
天生我材必有用_吴用5 小时前
Vue3 + VitePress 搭建组件库文档平台(结合 Element Plus 与 Arco Design Vue)—— 超详细图文教程
前端
纸照片5 小时前
【邪修玩法】如何在WPF中开放 RESTful API 服务
后端·wpf·restful