最近做的項目,使用了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
文章來源:劉俊濤的博客 歡迎關注公眾號、留言、評論,一起學習。
__________________________________________________________________________________
若有幫助到您,歡迎點擊推薦,您的支持是對我堅持最好的肯定(*^_^*)