json.stringify/json.parse 转数字,当超过18位,尾数会变0

图片描述

JSON.stringify({ id: 123456789012345678 })

当数字超过 18 位后,使用 JSON.stringify 或者 JSON.parse 后面的数字会变为 0。。。。有什么解决的方法吗?

阅读 9.2k
3 个回答

这和JSON.stringify或者JSON.pars没关系,而是浮点数的处理都是这样的。
你可以直接把这个数字复制给某个变量,然后再打印这个变量,结果也是一样的,末尾被消掉了。

后端传数字前端转字符串,个人觉得有风险,因为只要这个数字经过了JavaScript引擎的处理,这个末尾肯定会被削掉的。

我有2个主意:

  1. 你在接收到json字符串之后,自己先处理一下这段字符串,因为本质上json就是字符串嘛,给这个字段的数字加一对引号,然后再用JSON.parse,这样这个字段出来就是字符串而不是数字了。
  2. 要么就直接一点,你和后端商量下看能不能减小这个数字,或者直接让他给你传字符串。

数字变字符串就行了, JSON.stringify({ id: '123456789012345678' })

JS 中能精准表示的最大整数是 Math.pow(2, 53),十进制即 9007199254740992.你这样表示数字就可能丢失精度,数字不准确

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题