美文网首页时光轴
JSON.parse数字转换精度问题的解决(数字过大尾数会变0)

JSON.parse数字转换精度问题的解决(数字过大尾数会变0)

作者: 侯工 | 来源:发表于2021-11-11 11:19 被阅读0次

现象

用javascript把一个字符串转换为JSON对象,代码如下:

var responseString =  '{"log_id":7414159858253456226}';
var resultObj =  JSON.parse(responseString );

在debug的时候发现,resultObj 对象中:

log_id = 7414159858253456000

尾数变成000,跟原来不一致了。后续如果要使用,可能会造成混乱。

分析

JS 中能精准表示的最大整数是 Math.pow(2, 53),数字太大就可能丢失精度,建议后端id还是以字符串表示。

解决方案

用正则表达式把传过来的字符串中的id从数值改为字符串,以免丢失精度。

var newResponseString = responseString.replace(/\"log_id\": (\d+)/g,'"log_id":"$1"');
var resultObj = JSON.parse(newResponseString);

上面的正则表达式的意思是:在responseString中找 log_id:之后的数字,然后进行替换,增加 “”,使之成为字符串。

替换后的字符串是:newResponseString 的值是 '{"log_id":"7414159858253456226"}'

执行JSON.parse以后resultObj中,

log_id = "7414159858253456226"

虽然不是数值型,但信息没有丢失。

相关文章

  • JSON.parse数字转换精度问题的解决(数字过大尾数会变0)

    现象 用javascript把一个字符串转换为JSON对象,代码如下: 在debug的时候发现,resultObj...

  • js中转为数字格式

    + 对于数字字符串,可以直接用+转换: ~~ 可以将任意类型转数字,会向下取整,不是数字会转为0(总是得到整数) ...

  • js数字金额大写转换

    js数字金额大写转换,传入值number类型或string类型 移位的优化,防止出现精度不准的问题 输出结果

  • 关于alibaba.fastjson JSON.parse()

    今天写接口模拟数字签名验证,用到了JSON.parse()这个方法,数据一直转换异常,后来网上看到一篇文章解决了。

  • JS超最大范围整数相加(包括负数)

    JS对于数字超过最大范围的数字会被立即转换为科学计数法显示,并且数字精度也有误差,所以要实现超出最大整数范围(包括...

  • 备忘

    1、js中解决数字计算精度问题,math.js bignumber. math.js https://blog.c...

  • HDU-1753

    这个事实上就是高精度加法的模板题。所谓高精度加法,就是在数字过大的情况下,将数字看做是数组,数组中每个值只存一位。...

  • Spring - application.yml 数字读取错误、

    问题场景 application.yml 文件在读取纯数字的时候会将0开头的数字自动转换成8进制,场景如下: ap...

  • iOS开发中遇到的坑

    1.iOS中NSString类型转换成Float类型会出现精度不准确的问题,如果用于数字的比较会出现比较大大问题!...

  • php高精度计算

    bcadd — 将两个高精度数字相加 bcdiv — 将两个高精度数字相除 bcmod — 求高精度数字余数 bc...

网友评论

    本文标题:JSON.parse数字转换精度问题的解决(数字过大尾数会变0)

    本文链接:https://www.haomeiwen.com/subject/ruwwzltx.html