鍍金池/ 問答/HTML/ json.stringify/json.parse 轉(zhuǎn)數(shù)字,當(dāng)超過18位,尾數(shù)會(huì)

json.stringify/json.parse 轉(zhuǎn)數(shù)字,當(dāng)超過18位,尾數(shù)會(huì)變0

圖片描述

JSON.stringify({ id: 123456789012345678 })

當(dāng)數(shù)字超過 18 位后,使用 JSON.stringify 或者 JSON.parse 后面的數(shù)字會(huì)變?yōu)?0。。。。有什么解決的方法嗎?

回答
編輯回答
你好胸

JS 中能精準(zhǔn)表示的最大整數(shù)是 Math.pow(2, 53),十進(jìn)制即 9007199254740992.你這樣表示數(shù)字就可能丟失精度,數(shù)字不準(zhǔn)確

2018年6月1日 16:37
編輯回答
局外人

數(shù)字變字符串就行了, JSON.stringify({ id: '123456789012345678' })

2017年5月23日 00:16
編輯回答
情殺

這和JSON.stringify或者JSON.pars沒關(guān)系,而是浮點(diǎn)數(shù)的處理都是這樣的。
你可以直接把這個(gè)數(shù)字復(fù)制給某個(gè)變量,然后再打印這個(gè)變量,結(jié)果也是一樣的,末尾被消掉了。

后端傳數(shù)字前端轉(zhuǎn)字符串,個(gè)人覺得有風(fēng)險(xiǎn),因?yàn)橹灰@個(gè)數(shù)字經(jīng)過了JavaScript引擎的處理,這個(gè)末尾肯定會(huì)被削掉的。

我有2個(gè)主意:

  1. 你在接收到j(luò)son字符串之后,自己先處理一下這段字符串,因?yàn)楸举|(zhì)上json就是字符串嘛,給這個(gè)字段的數(shù)字加一對(duì)引號(hào),然后再用JSON.parse,這樣這個(gè)字段出來就是字符串而不是數(shù)字了。
  2. 要么就直接一點(diǎn),你和后端商量下看能不能減小這個(gè)數(shù)字,或者直接讓他給你傳字符串。
2017年1月3日 16:12