前端大数精度丢失的问题

在前后端数据交互中,由于JavaScript对数字的存储限制,长整型数字易发生精度丢失,导致数据查询异常。文章详细解析了精度丢失的原因,即超出IEEE754双精度浮点数的有效范围,并提供了将后端Long类型转换为String类型的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

与公司后端对接接口时,发现后端的一个定义为Long类型的数字的ID,返回到前端的时候,想通过这个ID去查询数据的时候发现查不到指定ID的数据,后来才发现是数字的精度丢失了。
比如:当传递的数据是20200615171812341,到前端展示的时候就变成了20200615171812340。

产生原因

Javascript在对数字进行存储的时候使用了IEEE 754中规定的双精度浮点数的数据结构,有效数字为16位十进制,安全的存储空间在 -2^53^ - 12^53^ - 1,数字范围从-90071992547409919007199254740991
Javascript中也定义了Number.MAX_SAFE_INTEGER为数字使用的最大安全值,当超过这个范围时就会出现数字精度丢失的问题。
在这里插入图片描述
在浏览器打印的时候也会出现这样的问题
在这里插入图片描述

解决办法

协商让后端的同事将这个Long类型的字段转换成String类型的就解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值