Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中解析json-长数字取整_Javascript_Json - Fatal编程技术网

在javascript中解析json-长数字取整

在javascript中解析json-长数字取整,javascript,json,Javascript,Json,我需要解析一个包含长数字的json(它是在Javaservlet中生成的)。问题是长的数字被四舍五入 执行此代码时: var s = '{"x":6855337641038665531}'; var obj = JSON.parse(s); alert (obj.x); 输出为: 6855337641038666000 请参见此处的示例: 为什么会这样?我该怎么解决呢?这个数字太大了。JavaScript对数字使用双精度浮点数,它们的精度约为15位(以10为基数)。JavaScript可以可

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

执行此代码时:

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

6855337641038666000
请参见此处的示例:


为什么会这样?我该怎么解决呢?

这个数字太大了。JavaScript对数字使用双精度浮点数,它们的精度约为15位(以10为基数)。JavaScript可以可靠地保存的最高整数是251


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

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

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

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

然后,您可以使用诸如之类的库来处理数字,而不是使用JSON.parse()

您可以检查以下示例:

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}'

您需要在javascript中计算数字吗?如果不是,你可以在json中把它变成一个字符串,在客户端使用。@Moshe:FWIW,这与json无关,
parseInt('6855337641038665531',10)
也返回
6855337641038666000
,这是Kolink解释的原因。无论如何,没有办法使用双精度IEEE-754s来处理它们。:-)@Niet the Dark Absol“解决方案是使用合理的数字。”你一定是在跟我开玩笑。在某些情况下,说“你想做错事”是有道理的,但当javascript不能像地球上其他任何语言一样正确地支持带符号的64位整数时,那肯定不是用户的错。@Wulf这是javascript的问题。不适用于JSON.Number.MAX\u SAFE\u整数