【精度丢失】后端接口返回的Long类型参数,不同浏览器解析出的结果不一样

Jison解决JS处理后端返回的Long型数据精度丢失问题 在前端页面展示数据的时候,通常都需要处理来自后端的json数据。通常这个过程都是非常简单的,比如通过jQuery的ajax。但是如果服务器传来的json中包含一个很大的整数,如 { “id”: 296675198462066688 } ,那么接受后会发现变成了 { id: 296675198462066700 } 。 简单的解决方法,让后端传给你string类型 但是后端的人会说:你们前端怎么显示... 阅读详情

1、业务背景

有个同事找我帮他看一个问题,他给前端提供了一个接口。

这个接口是用来反查id的,他这里这个参数正常的返回值应该是 283232039247028226。

但前端反馈他,前端在浏览器(火狐)获取的值是 283232039247028220(而且前端返回的这个值,并不存在于他的数据库中)。

而且他用浏览器(谷歌)进行访问返回的值也和前端一样是个错误值

Postman请求的值:

在这里插入图片描述

前端浏览器(火狐)请求的值:

在这里插入图片描述

2、问题分析

我用Edge浏览器进入前端页面查看,发现我这里返回的值和Postman是一致的

在这里插入图片描述

随后我去数据库查询他们得到的错误值,发现数据库是不存在的。既然数据库不存在,且不是所有浏览器都能复现,那应该就不是代码逻辑问题捞取到错误的值了。

随后我将正确的值、和他返回错误的值的值进行对比,发现整体是大致一样的,只有最后一位数不同。这个时候我就大概率感觉应该是精度损失的问题了!

随后一看他的代码,返回类型是用的Long类型的字段。百度得知前端JavaScript最大只能接收16位数字,故会导致精度丢失,以至于最后一位的6变成了0。(至于Edge为什么没有精度损失,怀疑可能是底层对其有一定的兼容)

3、解决方案

既然问题产生的原因已经很清晰了,那解决方案很简单,就是将原本的Long类型,修改为String类型,即可解决精度损失的问题。

4、总结

对于过长的id,尽量使用String进行存储和传递。因为你最多能确保在你这里是不会精度损失的,但你不能确保调用你接口的其他地方是以什么形式来解析你的id的。

js处理long精度丢失 其中,WRITE_DATES_AS_TIMESTAMPS 表示是否将日期类型序列化为时间戳类型,默认为 true,这里设置为 false 如果需要将日期类型序列化为时间戳类型,则不需要设置此属性。这是因为在 JavaScript 中,数字类型默认会被转换为双精度浮点数,而双精度浮点数的精度有限,只能精确表示 2 的 53 次方以内(即 Number.MAX_SAFE_INTEGER,约为 9 x 10^15)的整数。注意:此方式,会影响所有的接口,所有接口中的数字字段,都会被转换为字符串输出。 阅读详情

相关推荐

Vue2项目实战:海康威视WEB无插件开发包V3.4从下载到多画面预览(附完整代码)

本文详细介绍了在Vue2项目中集成海康威视WEB无插件开发包V3.4实现多画面监控预览的完整实战方案。内容涵盖从开发包下载、Nginx代理配置、核心组件封装到多画面并发加载与性能优化的全流程,并提供了完整的代码示例,帮助开发者高效解决浏览器无插件播放与多路视频流加载的难题。

c7d8e9的博客 320

Java后端返回Long类型数据与前端展示不一致(精度丢失)

接口返回数据的时候,有一个Long类型的主键字段(使用雪花算法生成的19位数字),单元测试、postman、apifox的返回数据均与数据库数据一致(1614468766644559873),前端浏览器查看返回数据却不一致(1614468766644560000)。

宇智波小强的博客 3288

大疆M3508电机使用CAN通信进行速度PID闭环控制详解

目录一. 简介二. 电机通信协议三. 电机PID控制原理四. 官方代码移植-中断接收五. 官方代码移植-查询接收 一. 简介 之前写过一篇文章STM32实现四驱小车(五)电机控制任务——电机速度PID控制算法,其中是以大疆的M3508电机为例进行讲解的(没错,就是RoboMaster机器人同款电机,不过Robomaster上的电机好像是小一号的M2006)。不少小伙伴私信问我要代码,我都回复说不是有官方demo么。后来问的人多了我大概明白了,看来官方的Demo还是有点门槛。可能是带FreeRTOS操作系统看

qq_30267617的博客 7万+

关于浏览器响应数据long型超长自动转换精度丢失的坑

关于浏览器响应数据long型超长自动转换精度丢失的坑

yige001的博客 2684

STM32H743+YT8512C以太网通信实战:CubeMX与LWIP配置详解

本文详细解析了基于STM32H743微控制器与YT8512C PHY芯片的以太网通信实战方案。通过CubeMX工具进行RMII接口、MPU、时钟树等关键硬件配置,并重点阐述了如何修改LWIP协议栈驱动代码以适配YT8512C芯片,解决了LAN8742驱动不兼容的问题。文章提供了从工程创建、代码适配到调试验证的完整步骤,帮助开发者快速实现稳定可靠的嵌入式网络连接。

weixin_29190573的博客 559

Agilent N5230A矢量网络分析仪在射频器件S参数测试中的关键操作指南

本文详细介绍了Agilent N5230A矢量网络分析仪在射频器件S参数测试中的关键操作流程与技巧。内容涵盖从开机预热、校准(SOLT/ECal)、参数设置(频率、点数、功率、IFBW)到连接测量、数据保存分析的全过程,并分享了夹具去嵌入、时域分析等进阶功能与常见问题避坑指南,旨在帮助工程师获得精准可靠的散射参数测试结果。

kotlin6android的博客 401

后端Long类型数据返回到前端造成精度丢失

前端的Number类型的数值的最大位数是16位,而后端雪花算法生成的ID是19位,所以通过传参到前端之后就会造成精度丢失的问题

NiceWeather9的博客 1042

【100%通过率】华为OD机试真题2026双机位C卷 C语言 实现【加密算法】

【100%通过率】华为OD机试真题2026双机位C卷 Python&JS 实现【加密算法】有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下

MISAYAONE的博客 648

后端返回前端Long类型的数据会发生变化

后来分析后决定,把Long转成String类型给到前台,方案就是在实体类id字段上增加注解,因为系统使用的是jackson,所以加上@JsonFormat(shape = JsonFormat.Shape.STRING)就可以了。今天在开发的过程中发现,后端有个Long类型的id,返回到前端,数值发生了变化,调查后发现是因为超过了前端能接收的最大数值,从而导致精度丢失。

dongdong199033的博客 3652

9、自动定理证明的发展历程与关键技术

本文全面介绍了自动定理证明的发展历程、关键技术及其实际应用,包括消解原理、参数化、支撑集策略等核心方法,并探讨了算法优化、数据结构优化及并行计算等提升效率的手段。同时,文章展望了未来发展方向,如深度学习在定理证明中的应用、交互式定理证明以及高阶逻辑的研究前景。

ll5678的博客 505

LLaMA Factory添加新模型template的实战解析

本文主要介绍了LLaMA Factory添加新模型template的实战解析,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 实战解析 2.1 检查代码 2.2 修改代码

herosunly的博客 19万+

服务端返回Long前端显示精度丢失

服务端返回Long前端显示精度丢失 参考: HttpMessageConverters 后端传输前段Long类型太长,而Java序列化JSON丢失精度的问题 修复Long类型太长,而Java序列化JSON丢失精度问题的方法 Springboot返回给前端的Long类型数据失去精度 关于springmvc 返回long类型数据前台丢失精度的问题 Spring Boot返回前端Long型丢失精度 ...

lemon 956

企业合规审查系统开发实战:基于知识图谱与深度学习的智能引擎构建(附完整Python代码)

动态合规监测:实时追踪法规变化并更新知识库智能合约审计:区块链智能合约的自动合规检查跨域知识融合:整合财务、法律、业务多维度数据可解释性增强:基于Attention机制生成合规审查依据。

理论都是虚的,代码才是王道。 456

long类型返回前端精度丢失

在阅读《阿里巴巴Java开发手册》时,发现有一条关于前后端超大整数返回的规约,具体内容如下: 这个问题在之前和前端联调的时候发生过,发现根据脚本 id 去审批的时候,状态没有变化,后来和前端沟通后,才知道这是 JavaScript 的一个坑,下面来复现下这个错误: 错误演示 创建一个 Spring Boot 项目,然后在新建一个接口,可以返回 DbScript 对象,其中 id 是由 mybatis-plus 的 IdWorker.getId(基于 Snowflake 算法)生成的 19 位 long 类

Mr1ght的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

解决后端接口返回Long类型参数导致的精度丢失问题

对于任何可能超出JavaScript安全整数范围的数字,特别是作为唯一标识符使用的长ID,都应该以字符串的形式进行存储和传输,以保证在整个系统链路中的一致性和准确性。类型字段超出了JavaScript的安全整数范围,导致了精度丢失的问题。Edge浏览器没有出现同样的问题,可能是因为它对长整型数字有更好的兼容性处理,或者是以字符串形式来处理这些数字,避免了精度丢失。此外,当使用Postman进行测试时,返回的值是正确的,但在前端页面中,尤其是火狐浏览器,出现了精度丢失的现象。在我们的案例中,后端返回的。

小李同学的博客 1210

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

vue前端处理后台返回的Long型数据精度丢失

vue前端处理后台返回的Long型数据精度丢失 问题描述 开发时后端返回的id为Long型,结果发现俩id怎么会一样呢?如下图是控制台Preview返回的数据 正以为是后端那边数据有误时,我点开Response发现这边的id是正常的… Preview和Response的数据居然不一样 哎呀我去…这不是搞事情么 于是通过面向百度的学习方式,了解到,js对于超出17位的Long型数据会出现精度丢失的问题。 有问题我们就要解决 解决办法 方法1:简单粗暴,手里拿着板砖和蔼的要求后端不要返回Long,返回Str

qq_43555948的博客 5828

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

后端Long类型传给前端显示丢失精度

目录 问题描述 测试第一步 测试第二步 原因 解决 问题描述 后端服务controller传给前端Long类型的字段,出现丢失精度问题。 原数据18位,例如:157276510349800005 private Long customerId; 传给前端,页面显示为:157276510349800000 测试第一步 在本地测试,Long类型在本地输出正常,可知后端传参数正常 public static void main(String[] args) { ..

zhangm2020的博客 1038

SpringBoot项目接口返回值中Long类型超过17位导致前端js在调用时出现丢失精度问题

解决办法很简单将Long类型的字段转为String类型返给前端即可,解决方法有3种可根据自己项目情况来选择: 方式1 在实体类种直接将Long类型的字段修改为String类型 方式2 在要返回的字段上添加@JsonSerialize(using = ToStringSerializer.class)注解,这样就能在序列化时自动将该字段类型转为String类型返给前端,相较于方式1不影响其他调用该字...

今晚摸鱼 2295

后端的Long型参数,让阿粉踩了个大坑

每天早上七点三十,准时推送干货最近几天一直在改造工程,采用雪花算法生成主键ID,突然踩到一个天坑,前端 JavaScript 在取 Long 型参数时,参数值有点不太对!一、问题描述最近...

Java极客技术 5361

js long类型精度丢失_Jison解决JS处理后端返回的Long型数据精度丢失问题

在前端页面展示数据的时候,通常都需要处理来自后端的 json 数据。通常这个过程都是非常简单的,比如通过 jQuery 的ajax。但是如果 服务器 传来的json中包含一个很大的整数,如 { "id": 296675198462066688 } ,那么接受后会发现变成了 { id: 296675198462066700 } 。简单的解决方法,让后端传给你string类型但是后端的人会说:你们前端...

weixin_36257615的博客 810

Long类型js处理值变短的问题,js处理long精度丢失

方法二:启动服务,打开浏览器访问 http://localhost:8080/,点击1和2两个超链接,它们请求的接口一样,但是返回的结果中,a字段值不一致。方法一:打开浏览器,按F12调出控制台,在控制台中输入 console.log(9223372036854775807) ,打印的结果与传入的参数不一致。后端long类型的数据返回前端时,经过js处理后,会存在精度丢失的情况。注意:此方式,会影响所有的接口,所有接口中的数字字段,都会被转换为字符串输出。

fengbin2005的专栏 772

前后端联调,调相同接口(参数、传参方式、请求方式都一样),Netword 和 Postman 中返回数据不一致原因剖析以及解决方案

前后端联调,调相同接口(参数、传参方式、请求方式都一样),Netword 和 Postman 中返回数据不一致原因剖析以及解决方案

zhuang的博客 4277

后端id类型为long类型时,返回给前端浏览器四舍五入,导致id精度缺失问题

今天在代码里,掉了别人写的接口,有个id的字段是long类型的,我这边加点参数返回给前端,然后前端根据id修改,结果修改的数据记录有,但是没起作用,后来发现根据他传给我的id在后台数据库查不到数据,然后发现,在浏览器控制台中后端响应的数据和前端预览的数据不一致,如下图。

GDFHGFHGFH的博客 733

js long类型精度丢失_JS大坑之19位数的Number型精度丢失问题详解

More本项目仅供爬取体验,每次访问都会实时爬取数据,所以数据返回速度会比较慢,实际操作应该是定时爬取数据然后将数据存进数据库,数据从数据库返回从而提高数据返回效率。但项目很基础,可以作为以上各个node模块最基础的练手使用,希望可以帮到大家 ????起源最近在实现一个需求的时候,需要接入第三方的接口,先调用A接口,A接口返回的数据里,有一个taskId,然后再使用这个taskId请求B接口,获取最终需...

weixin_39543835的博客 1994

aop springboot 传入参数_后端的Long型参数,让我踩了个大坑

最近几天一直在改造工程,采用雪花算法生成主键ID,突然踩到一个天坑,前端 JavaScript 在取 Long 型参数时,参数值有点不太对!一、问题描述最近在改造内部管理系统的时候, 发现了一个巨坑,就是前端 JS 在获取后端 Long 型参数时,出现精度丢失!起初,用 postman 模拟接口请求,都很正常,但是用浏览器请求的时候,就出现问题了!问题复现打开浏览器,请求接口,结果如下!用 pos...

weixin_29476595的博客 1713
上一篇: 【机器学习实战】朴素贝叶斯:过滤垃圾邮件
下一篇: 【MapStruct】使用MapStruct拷贝对象,最后返回的对象是个空对象
爱写BUG的老冉
博客等级 码龄8年 2357粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值