zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Spring Boot 处理 Long 类型的 json 数据,前端调用精度丢失,变成 00

2023-09-14 09:07:22 时间

问题描述

错误的ID,最后两位数都是0,即:
1152921504735848700,
但是,正确的是:
1152921504735848759,

遇到Long类型的数据,传送给前端遇到精度丢失的问题.

后端的订单号值比如1089713253179727872 传给前端 显示出来是1089713253179727900。

拿postman测试接口没有问题,查到的是正确的数据,原来是因为Long类型数据传给前端可能精度丢失,js中的数据类型不能包含所有的java long值。

这个问题真是在前后端连接的夹缝中求生存了,同事跟我说拿返回的数据查不到,我拿postman调后端又完全发现不了问题。话又说回来,用swagger可以发现这个问题的。

后端(Java)数据获取正常,前端显示精度有误。

原因分析

Java Long的范围:
long的最大值:9223372036854775807
long的最小值:-9223372036854775808

大整数的精度丢失和浮点数本质上是一样的,尾数位最大是 52 位,因此 JS 中能精准表示的最大整数是 Math.pow(2, 53),十进制即 9007199254740992。

600040076242144000 > 9007199254740992

9007199254740992

大于 9007199254740992 的会丢失精度。

9007199254740992 >> 10000000000000…000 // 共计 53 个 0
9