后端发送给前端雪花算法生成的Long类型Id 前端接收Id与发送的Id不匹配
问题描述:后端传Long类型给前端, Long类型数据大于17位时。前端拿到的数据出现精度丢失。
问题原因:后端传的Long类型Id是64位整数,在js中number类型的安全整数是53位,如果超过53位,则精度会丢失(浮点数舍入)。
当小数部分超过52位后的数字会被截断,就会发生精度缺失,无法再去精确地表示这个数字 使得原来不相等的数字在这种情况下变得相等,因为js中是使用浮点数模拟的整数,所以其能精确表示的数字范围最多只能是小数点后52位
Number.MAX_SAFE_INTEGER// 结果9007199254740991
Number.MIN_SAFE_INTEGER// 结果-9007199254740991
简单来说,JS 中的Number
类型只能安全地表示-9007199254740991 (-(2^53-1))
和9007199254740991(2^53-1)
之间的整数,任何超出此范围的整数值都可能失去精度。
解决精度缺失的方法
将Long类型字段统一转成String类型。
代码实现
在SpringBoot中可以使用注解@JsonSerialize(using = ToStringSerializer.class)
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;@JsonSerialize(using = ToStringSerializer.class)
private Long Id
@JsonSerialize注解可以用来指定一个类的实例如何被序列化成JSON。它可以用在类或字段上,以useing属性指定特定的序列化器,用来代替Jackson默认的序列化器。
@JsonSerialize(using = ToStringSerializer.class)是Jackson提供的一个序列化类,用于将Java对象转换为字符串。这个注解可以用在属性上,以将指定的属性序列化为字符串。
后端发送给前端雪花算法生成的Long类型Id 前端接收Id与发送的Id不匹配相关推荐
- 根据时间戳生成编号_使用雪花算法生成流水号!
前言"在分布式系统中常见的问题就是如何生成流水号,一般情况下会有专门的流水号系统,不过在开发过程中或者开发早期不一定会有专门流水号系统,在这里介绍下我所使用的流水号生成器--雪花算法&quo ...
- mybatis-plus雪花算法生成Id使用详解
文章目录 前言 一.mybatis-plus官网 二.雪花算法实战 1.建表 2.新建测试工程 3.单元测试 三.实现分析 四.为什么默认就是雪花算法 五.主动设置Id生成策略 六.内置的雪花算法工具 ...
- 雪花算法及运用PHP,雪花算法生成全局唯一ID,参考了下网上雪花算法生成规则,机器ID和序列号自动获取 理论上毫秒可生成 1024*4096个唯一ID
任务要求毫秒生成10000个唯一ID 研究了下twitter/snowflake的算法思想: 参考了下网上雪花算法生成规则,把数据中心和机器编号整合一起,变成10位机器ID, 机器ID和序列号自动获取 ...
- 线上使用雪花算法生成id重复问题
项目中使用的是hutool工具类库提供的雪花算法生成id方式,版本使用的是5.3.1 <dependency><groupId>cn.hutool</groupId> ...
- 基于雪花算法生成用户id
8.1 为啥这样做 1.全局唯一性,不会出现重复的id.如果通过id自增来保证id不重复,则该表 无法分表操作例如 服务器A的数据库的user表 数据如下1 小明 男2 小红 女2 张三 男此时 进行 ...
- DefaultIdentifierGenerator 雪花算法 生成 重复 id 解决办法
DefaultIdentifierGenerator 雪花算法 生成 重复 id 前言 问题发生 排查原因 问题解决 前言 利用 mybatisplus 的 DefaultIdentifierGene ...
- SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】
SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCl ...
- 分布式下使用雪花算法生成全局ID及解决时钟回拨问题
简介 雪花算法是 64 位 的二进制,一共包含了四部分: 1位是符号位,也就是最高位,始终是0,没有任何意义,因为要是唯一计算机二进制补码中就是负数,0才是正数 41位是时间戳,具体到毫秒,41位的二 ...
- Java工具类--雪花算法生成全局唯一ID
import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...
最新文章
- asp.net html5 异步,asp.net core 系列 5 项目实战之:NetCore 的 async 和 await(参考自:Microsoft教程)...
- Demo:基于 Flink SQL 构建流式应用
- Jboss/Wildfly安装配置
- 开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态
- 将log4cplus.so集成到linux下报undefined reference to 错误
- android 代码获取屏幕图像,安卓获取屏幕以及获得像素点 ~ 大树洞
- opencv在python环境下的安装_关于python环境下的opencv安装
- 参考信息 - 云原生(Cloud Native)
- List集合去重的三种方法
- HTML .CSS实现商品详情(detail)
- 台式计算机的电流是多少,电脑台式机一天耗电大概是多少
- 桐桐的新闻系统【模拟】
- 计算机考研选择211还是重邮,22考研:这些容易但性价比高的院校专业千万别错过!...
- alios thing 信号量_AliOS Things内核API
- U盘系统盘制作与系统安装(详细图解)
- 【单片机仿真】(九)指令系统 — 算术运算指令 之 ADD、ADDC、SUBB、INC、DEC、DA
- iOS-APP包的瘦身之旅(从116M到现在的36M的减肥之路)
- Eclipse 3.6 M7(太阳神版)发布
- java计算机毕业设计HTML5游戏网站设计与实现源码+mysql数据库+系统+lw文档+部署
- webservice:(2)体验查询号码归属地demo