最近做的项目,使用了19位int 出现最后两位变成00的问题。
以下为解析和解决方案:
JS19位数的Number型精度丢失问题详解
https://www.cnblogs.com/xuyaoyao/p/9322035.html
JSON Bigint 大数精度丢失的背后
https://cloud.tencent.com/developer/article/1477816
前端获取Long型数值超过17位精度丢失的解决办法
前端获取Long型数值精度丢失
我后端是用的雪花算法生成的20位的唯一ID,我返回给前端的时候,例如:
我返回的是Long类型的,但是前端接收之后精度丢失,导致和我后端给的不一致,解决办法就是使用String类型的。
后端传输JSON格式化为String类型的。
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long aliyunOssFileId;
@JsonFormat(shape = JsonFormat.Shape.STRING)作用就是将JSON数据的此字段格式化为字符串类型,保证前端超过17位不会出现精度丢失问题!
前端使用String类型来接收。
aliyunOssFileId: ''
后端生成:674563542816526336
前端接收:674563542816526300
由于JavaScript中Number类型的自身原因,并不能完全表示Long型的数字,在Long长度大于17位时会出现精度丢失的问题。
所以,不应该使用ResponseBean<Long>,应该使用ResponseBean<String>,转换成字符串类型的。
参考:https://www.lzhpo.com/article/106
文章来源:刘俊涛的博客 欢迎关注公众号、留言、评论,一起学习。
__________________________________________________________________________________
若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(*^_^*)