js数值转换自动 四舍五入?

clipboard.png

为什么会出现上图的问题?原理是什么?

'{"a":1234567890123456789,"b":1234567890123456789}' 如果是这样的一个json字符串怎么解析出来呢?用没有现成的轮子?

str = '{"a":1234567890123456789,"b":1234567890123239,"c":1234567890,"d":NaN}';
str = str.substr(1);
str = str.substr(0,str.length-1);
str.split(",");
arr = str.split(",");
obj = {};
arr.forEach(function(el,index){
    var arr1 = el.split(":");
    obj[arr1[0]]=(arr1[1]);
});
console.dir(obj);
//这是我刚写的一个写法,我就想知道还有什么炫酷的方法没有

clipboard.png

JSON.parse()不可以

阅读 6.1k
4 个回答

数值太大,零度丢失
clipboard.png

谢邀,来晚了,最大值那个楼上都说了,我来说一下炫酷json那个。

我的思路一般都是正则

var str = '{"a":1234567890123456789, "b": 1234567890123456789, "c": 1234567890123456789}';
var json = JSON.parse(str.replace(/\:\ *(\d*?)\ *(\,|\})/g, (a, b, c) => `:"${b}"${c}`));
console.log(json);

更新
加了是否是value的检测判断

var str = '{"a":1234567890123456789, "b": 1234567890123456789, "c": 1234567890123456789,"d":":123,", "e": ":1234567890123456789,"}';

var formatStr = str.replace(/\:\ *(\d*?)\ *(\,|\})/g, (a, b, c, d, e) => {
  if (e.substr(0, d).split('"').length % 2 === 0) return a;
  return `:"${b}"${c}`;
});

console.log(JSON.parse(formatStr));

支持楼上。
解决方法是 保存为了 string 类型

你可以看一下es6数值扩展

js能正确表示-2^53到2^53之间的,超过这个范围就不精确了.

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