当前位置:首页 > 科技  > 软件

谁动了我的代码——Long精度丢失

来源: 责编: 时间:2023-12-13 17:02:13 355观看
导读一个诡异的现象在进行数据结构设计时,我们通常需要考虑到相关业务的数据量等因素。比如非核心业务但数据量大并且频繁写入的表的主键,我们可能会考虑设计为Long类型。刚开始,数据量小,可能并不会发现什么问题。但是当数据

一个诡异的现象

在进行数据结构设计时,我们通常需要考虑到相关业务的数据量等因素。比如非核心业务但数据量大并且频繁写入的表的主键,我们可能会考虑设计为Long类型。刚开始,数据量小,可能并不会发现什么问题。但是当数据量大了,或者Id采用雪花算法生成,这个时候诡异的事情便会发生。aHl28资讯网——每日最新资讯28at.com

后端数据正常返回,postman调试看数据也正常。但是当前端用后端返回的这个id查询相应的数据时,便会发生诡异的NotFoundException,或者查询的出来的数据和原先的数据不一致。aHl28资讯网——每日最新资讯28at.com

所以,谁偷偷动了我的代码?aHl28资讯网——每日最新资讯28at.com

aHl28资讯网——每日最新资讯28at.com

JavaScript的数值精度

如果只从后端分析问题,或者只从前端分析问题,那永远也找不到答案。aHl28资讯网——每日最新资讯28at.com

在 JavaScript 中,数值类型默认会被转换为双精度浮点数,而双精度浮点数的精度有限,只能精确表示 2 的 53 次方以内(即 Number.MAX_SAFE_INTEGER,约为 9 x 10^15)的整数。对于超过该范围的长整数,JavaScript 会发生精度丢失,导致值变得不准确。aHl28资讯网——每日最新资讯28at.com

例如一个雪花算法生成的ID 1734042308679487490,前端获取到的值却变成了1734042308679487500aHl28资讯网——每日最新资讯28at.com

aHl28资讯网——每日最新资讯28at.com

知道了问题的原因,问题就容易解决了——将Long类型作为String类型返回给前端即可。aHl28资讯网——每日最新资讯28at.com

一个简单的解决办法

(1) Spring Boot 中提供了 @JsonFormat 注解,可以对实体类中的属性进行序列化和反序列化格式化。对于 Long 类型的属性,可以设置其格式为字符串类型,并在前端进行相应的处理,以保持其精度不丢失。如:aHl28资讯网——每日最新资讯28at.com

public class Order {  @JsonFormat(shape = JsonFormat.Shape.STRING)  private Long id;  ...}

前端获取到的是string类型的数据,自然也不会有精度丢失的问题了。aHl28资讯网——每日最新资讯28at.com

(2) SpringBoot也支持在通过配置文件在项目级别,将数值类型的数据转成字符串返回给前端,通过在 application.properties 文件中添加配置即可:aHl28资讯网——每日最新资讯28at.com

# 默认为falsespring.jackson.seralization.WRITE_NUMBER_AS_STRINGS=true

(3) 如果不想使用 @JsonFormat 注解或者项目不是基于SpringBoot框架构建的,同样的思路,直接将Long类型转换成String返回给前端即可。aHl28资讯网——每日最新资讯28at.com

总结

在 JavaScript 中数值类型最大精度大约为9*10^15,即超过16位的数值一定会存在精度丢失问题。因此,后端返回Long类型的数值时,需要转换成String给到前端。aHl28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-44400-0.html谁动了我的代码——Long精度丢失

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 现代软件架构:事件驱动设计遇上事件溯源

下一篇: Python进阶指南,惰性求值,lambda表达式

标签:
  • 热门焦点
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的“今天”,百度也很迷茫。“新业务到 2022 年底还是 0,希望 2023 年出来一个 1。”这是2022年底,李彦宏
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
Top