在javascript中解析json - 长数字被舍入

时间:2013-03-28 18:43:41

标签: javascript json

我需要解析一个包含长数字的json(在java servlet中生成)。问题是长数字被四舍五入。

执行此代码时:

var s = '{"x":6855337641038665531}';
var obj = JSON.parse(s);
alert (obj.x);

输出是:

6855337641038666000

在此处查看示例:http://jsfiddle.net/huqUh/

为什么会这样,我该如何解决?

4 个答案:

答案 0 :(得分:7)

正如其他人所说,这是因为这个数字太大了。但是,您可以通过将数字作为字符串发送来解决此限制:

var s = '{"x":"6855337641038665531"}';

然后,您可以使用javascript-bignum等库来代替使用JSON.parse()来处理数字。

答案 1 :(得分:6)

这个数字太大了。 JavaScript对数字使用双精度浮点数,它们具有大约15位精度(在基数10中)。 JavaScript可以可靠保存的最高整数类似于2 51

解决方案是使用合理的数字。没有真正的方法来处理如此庞大的数字。

答案 2 :(得分:3)

JavaScript可以处理的最大数量是9007199254740992

答案 3 :(得分:1)

我前段时间遇到了这个问题,我能够使用这个库解决:https://github.com/josdejong/lossless-json

您可以查看此示例:

let text = '{"normal":2.3,"long":123456789012345678901,"big":2.3e+500}';
// JSON.parse will lose some digits and a whole number:
console.log(JSON.stringify(JSON.parse(text)));
// '{"normal":2.3,"long":123456789012345680000,"big":null}'      WHOOPS!!!
// LosslessJSON.parse will preserve big numbers:
console.log(LosslessJSON.stringify(LosslessJSON.parse(text)));
// '{"normal":2.3,"long":123456789012345678901,"big":2.3e+500}'