问题描述:后端传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不匹配相关推荐

  1. 根据时间戳生成编号_使用雪花算法生成流水号!

    前言"在分布式系统中常见的问题就是如何生成流水号,一般情况下会有专门的流水号系统,不过在开发过程中或者开发早期不一定会有专门流水号系统,在这里介绍下我所使用的流水号生成器--雪花算法&quo ...

  2. mybatis-plus雪花算法生成Id使用详解

    文章目录 前言 一.mybatis-plus官网 二.雪花算法实战 1.建表 2.新建测试工程 3.单元测试 三.实现分析 四.为什么默认就是雪花算法 五.主动设置Id生成策略 六.内置的雪花算法工具 ...

  3. 雪花算法及运用PHP,雪花算法生成全局唯一ID,参考了下网上雪花算法生成规则,机器ID和序列号自动获取 理论上毫秒可生成 1024*4096个唯一ID

    任务要求毫秒生成10000个唯一ID 研究了下twitter/snowflake的算法思想: 参考了下网上雪花算法生成规则,把数据中心和机器编号整合一起,变成10位机器ID, 机器ID和序列号自动获取 ...

  4. 线上使用雪花算法生成id重复问题

    项目中使用的是hutool工具类库提供的雪花算法生成id方式,版本使用的是5.3.1 <dependency><groupId>cn.hutool</groupId> ...

  5. 基于雪花算法生成用户id

    8.1 为啥这样做 1.全局唯一性,不会出现重复的id.如果通过id自增来保证id不重复,则该表 无法分表操作例如 服务器A的数据库的user表 数据如下1 小明 男2 小红 女2 张三 男此时 进行 ...

  6. DefaultIdentifierGenerator 雪花算法 生成 重复 id 解决办法

    DefaultIdentifierGenerator 雪花算法 生成 重复 id 前言 问题发生 排查原因 问题解决 前言 利用 mybatisplus 的 DefaultIdentifierGene ...

  7. SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCl ...

  8. 分布式下使用雪花算法生成全局ID及解决时钟回拨问题

    简介 雪花算法是 64 位 的二进制,一共包含了四部分: 1位是符号位,也就是最高位,始终是0,没有任何意义,因为要是唯一计算机二进制补码中就是负数,0才是正数 41位是时间戳,具体到毫秒,41位的二 ...

  9. Java工具类--雪花算法生成全局唯一ID

    import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...

最新文章

  1. asp.net html5 异步,asp.net core 系列 5 项目实战之:NetCore 的 async 和 await(参考自:Microsoft教程)...
  2. Demo:基于 Flink SQL 构建流式应用
  3. Jboss/Wildfly安装配置
  4. 开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态
  5. 将log4cplus.so集成到linux下报undefined reference to 错误
  6. android 代码获取屏幕图像,安卓获取屏幕以及获得像素点 ~ 大树洞
  7. opencv在python环境下的安装_关于python环境下的opencv安装
  8. 参考信息 - 云原生(Cloud Native)
  9. List集合去重的三种方法
  10. HTML .CSS实现商品详情(detail)
  11. 台式计算机的电流是多少,电脑台式机一天耗电大概是多少
  12. 桐桐的新闻系统【模拟】
  13. 计算机考研选择211还是重邮,22考研:这些容易但性价比高的院校专业千万别错过!...
  14. alios thing 信号量_AliOS Things内核API
  15. U盘系统盘制作与系统安装(详细图解)
  16. 【单片机仿真】(九)指令系统 — 算术运算指令 之 ADD、ADDC、SUBB、INC、DEC、DA
  17. iOS-APP包的瘦身之旅(从116M到现在的36M的减肥之路)
  18. Eclipse 3.6 M7(太阳神版)发布
  19. java计算机毕业设计HTML5游戏网站设计与实现源码+mysql数据库+系统+lw文档+部署
  20. webservice:(2)体验查询号码归属地demo

热门文章

  1. [Qt] isVisible()与isHidden()区别
  2. 【OBS】dshow_input 视频采集设备的源创建和枚举
  3. 推荐经常会用到的几款SEO优化工具—竹晨网络
  4. 程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序
  5. 椭圆曲线--给自己看
  6. 关于队里面最菜的在博客打卡第三十六天这件事
  7. ES6总结——let、const
  8. 计算机的清楚键盘是,怎样清楚电脑键盘中的脏东西?
  9. 将数组转换成字符串的方法
  10. 数组和字符串的相互转换---------数组转换为字符串