当前位置: 首页 > news >正文

number类型超出16位的问题(前端、后端处理)

目录

1、前端解决方案 

1.1 甩链接

1.2 接口返回数据过程中将数据处理为字符串(过过嘴瘾)

1.3 对返回的json字符串进行数据预处理代码如下

        2、后端解决方案

2.1 toString、String、'' 、new String() 自己悟、就是要改的地方多。

2.2拦截器 (可能超出范围的数值 前后端都可以写) 

2.3 @JSONField(serializeUsing= ToStringSerializer.class) 推荐


今天写代码遇到了一个老接口返回数据 Long 类型 超过16位、前端 JS Number强类型转换数字超过16位精度丢失。

大家可以在页面控制台试一试

输入 1506837762369851394   变  1506837762369851400

前端又把参数传递给我保存数据库、导致数据对不上了。

造成原因:js的number类型有个最大安全值,2的53次方(9007199254740992),超过这个值就会出现精度丢失的问题。

先聊前后端怎么解决、再分析下原因

1、前端解决方案 

(如果接口涉及问题比较特殊、单一等就考虑前端处理、其实我不推荐这种方式)

虽然我不推荐这种方式、但我今天还是让前端处理了、因为接口复用、问题单一等等(最重要的是 别人写的老接口、用的地方多了、我但扛不住懒呀

1.1 甩链接

我就甩给了前端大佬一个网页链接(后端想偷懒的请复制):

解决后端返回的number类型超出16位的问题 ,json-bigint库在axios中处理 - 简书

1.2 接口返回数据过程中将数据处理为字符串(过过嘴瘾)

1.3 对返回的json字符串进行数据预处理代码如下

{GMSFHM:1506837762369851394}GMSFHM:json中的keylet ress = JSON.parse(res.replace(/\"GMSFHM\":(\d+)/,'"GMSFHM": "$1"'));

2、后端解决方案

做为后端的程序猿、当然又很多的处理方案了。宗旨就一句 "将数字类型(Long)变量转为字符串类型(String)即可"

2.1 toString、String、'' 、new String() 自己悟、就是要改的地方多。

2.2拦截器 (可能超出范围的数值 前后端都可以写

在Response里面加个拦截器,

用正则匹配修改 超过16位的Number类型数值 ,修改为String类型

2.3 @JSONField(serializeUsing= ToStringSerializer.class) 推荐

1、pom中加入(推荐 1.2.83版本  23年5月8号太久远就查最新的注意漏洞

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency>

2、对象基类加入

    @JSONField(serializeUsing = ToStringSerializer.class)@TableId(type = IdType.ASSIGN_ID)protected Long id;

溺水三千,我只取一瓢;
方法很多,我只举三种。

http://www.lryc.cn/news/66639.html

相关文章:

  • 【高并发】网络模式
  • springboot+dubbo+zookeeper 项目实战
  • PHP学习笔记第一天
  • 案例研究|萤石网络通过JumpServer解决安全运维难题
  • 即时聊天app开发-即时通讯app开发方案分析
  • js为什么会阻塞渲染, 什么是异步?
  • Nuvoton NK-980IOT开发板 u-boot 编译
  • OpenCL使用CL_MEM_USE_HOST_PTR存储器对象属性与存储器映射
  • 浅谈osgEarth操控器类的createLocalCoordFrame函数如何将局部坐标系的点转为世界坐标系下的Martix(ENU坐标)
  • PHP程序员和Python程序员的职业前景怎么样?我来聊聊自己的体会
  • 【MATLAB图像处理实用案例详解(8)】—— 图像数字水印算法
  • 最全的免费SSL证书申请方式
  • Ceph入门到精通-CrushMap算法概述
  • 如何利用API做好电商,接口如何凋用关键字
  • Give me a logic game idea about economics
  • 测试之路,2023年软件测试市场领域有哪些变化?突破走得更远...
  • 配置Windows终端直接执行Python脚本,无需输入“python“
  • IDEA快捷键
  • 关于c++指针数组的要设置初值的情况
  • 泰克RSA306B频谱分析仪测试信道功率方法
  • 深度学习技巧应用12-神经网络训练中批归一化的应用
  • Masonry使用以及源码解析(未完待续
  • 118-Linux_数据库_索引
  • macos和windows区别 macos怎么运行windows程序
  • 一起Talk Android吧(第五百四十二回:无进度值ProgressBar)
  • Oracle DataGuard奇怪的ORA-16494错误
  • 《花雕学AI》Poe 一站式 AI 工具箱:ChatGPT4 体验邀请,亲,不要错过哦!
  • AttributeError: module ‘lib‘ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK‘
  • Origin如何绘制基础图形?
  • OpenGL(九)——颜色