最近做的項目,使用了19位int 出現最後兩位變成00的問題。
以下為解析和解決方案:
JS19位數的Number型精度丢失問題詳解
javascript:void(0)
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>,轉換成字元串類型的。
耶和華是我的牧者,我必不至缺乏。