前端處理後端傳回的 Long 型別資料精度丟失

2021-10-01 06:57:41 字數 1367 閱讀 4695

直接拋問題,如下圖所示:

檢視 network 時,響應回來的 long 型別資料和在控制台列印的資料出現的精度丟失的問題。

經查閱資料,原來 js 內建有 32 位整數,而 number 型別的安全整數是 53 位。如果超過 53 位,則精度會丟失。正如現在後台傳來乙個 64 位的 long 型別整數,因此超過了 53 位,所以後台返回的值和前台獲取的值會不一樣。

後端可以給前端傳乙個 long 型別的資料,但是這個 long 型別的資料也不能太長,不然 js 轉換乏力。

3.1 後端處理
# 將所有數字轉為 string 型別返回,避免前端資料精度丟失的問題

spring.jackson.generator.write-numbers-as-strings = true

3.2 前端處理
handleresdata(str) 將所有對應的長整數 value,通過正則查出加上字串的雙引號標識,然後進行 json.parse() 轉回 string。該方法並不能進行長整數計算,需要的話可以使用 long.js。

wx.

request(,

datatype:

'text'

, header:

, method:

'post'

,success

:function

(res),

fail

:function

(err)}

)function

handleresdata

(str

)[,]?/.

test

(_str)

if(i ==

true

)[,]?/.

exec

(_str)

var handlestr2 =

/[0-9]/.

exec

(handlestr[0]

) _str = _str.

replace

(handlestr[0]

,':"'

+handlestr2[0]

+'",')}

} _str = _str.

replace(/

[,][}]/g

,'}'

)return

json

.parse

(_str)

}

id為Long型別的後端處理方案

痛點 js的long型別最大17位數,超過17位的數字,為將多出來的位數變成零 queryuser public list user queryuser 開啟瀏覽器,請求介面,結果如下!我們這裡選擇第二種方法 我們可以使用jackson工具包來實現物件序列化。springboot預設自帶是jacks...

後端傳的long資料型別,前端js解析後精度失準

前言 昨晚上和後端對介面,乙個返回的json陣列裡面,有兩條資料一直對不上號。他在postman裡面測是乙個資料,到了我這邊拿到資料以後console.log,那個引數的資料值就變了。一直到不到原因 但是在前端response裡面可以看到,後端傳的資料是正確的,在preview裡面卻不正確 2.原因...

後端傳Long型別資料精度問題

在今天編碼過程中發現乙個小問題。後端資料庫資料 1169459812992421888 前台拿到 1169459812992422000 前幾位高度重合,排除程式邏輯問題。在返回前設定斷點列印,資料依據與資料庫依舊保持一致 說明資料是在返回過程中丟失了精度。考慮不直接傳long,傳json 引入依賴...