JS的JSON.parse数字转换精度问题,解决不了可以找我

小编最近遇到一个问题,之前数据库id不是雪花算法的时候,前台json解析是不会丢失精度的,查了一下博客:

JavaScript数字精度丢失问题总结 - snandy - 博客园  具体原因

按照小编的理解:在超过15位纯数字的时候-----------------------------------------------

此时只能模仿十进制进行四舍五入了,但是二进制只有 0 和 1 两个,于是变为 0 舍 1 入。这即是计算机中部分浮点数运算时出现误差,丢失精度的根本原因。

大整数的精度丢失和浮点数本质上是一样的,尾数位最大是 52 位,因此 JS 中能精准表示的最大整数是 Math.pow(2, 53),十进制即 9007199254740992。

,JSON解析会发生精度丢失,样例代码

var data = '{"success":"true","projectId":730107215209299968}';var obj = JSON.parse(data); console.log(obj.projectId);

效果图

我是怎么解决这个问题,用正则表达式

//这个是之前版本,但是如果你是1s这样的也是通过的,原因是*,这个是匹配数字后一位任意符号
var patt1 = /[1-9][0-9]*/;
data.match(patt1);
//想只要匹配是数字把*去掉
var patt1 = /[1-9][0-9]/;

这个是json中只有一个数字项

还有一种是匹配 projectId:730107215209299968 这种目标key value形式的

var data = '{"success":"true","projectId":730107215209299968}';
//匹配projectId对于的key
var newResponseString = data.replace(/\"projectId\":(\d+)/,'"projectId": "$1"');
var resultObj = JSON.parse(newResponseString);alert(resultObj.projectId);

效果图

第二种:最近遇到了多个id需要转换,有点太麻烦了,最后百度了一下,因为小编这里用得市springboot搭建得项目,所有用一个标签就行了放到实体类得

 
//引入得jar包
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
   //实体类ID
    @JsonSerialize(using = ToStringSerializer.class)
    private Long adminAreaId;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值