Json max int number

时间:2017-11-08 19:49:14

标签: javascript json

请告诉我,如何从json中获取数字,为什么在数字的末尾出现零?

var a = '{ "n": 870744036720833075 }';
var json = JSON.parse(a);

document.getElementById('test').innerHTML = json.n; // 870744036720833000 why?

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

此整数超出Javascript认为的安全整数。您可以通过运行Number.isSafeInteger(870744036720833075)进行测试,这将返回false。 因此,数字将以最大可用精度存储。

有关最大安全整数的说明,请参阅here。可以在文档中注意到这种副作用。

  

此上下文中的安全是指表示整数的能力   准确地并且正确地比较它们。例如,   Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2将   评估为true,这在数学上是不正确的。看到   Number.isSafeInteger()获取更多信息。

这意味着从Javascript的角度来看,您创建的数字以及它给您的数字将与同一事物进行比较。

<强>更新

要存储号码,您必须将其视为字符串。将您的json更改为var a = '{ "n": "870744036720833075" }';

如果您需要对它们执行数学运算,您可以找到一些Javascript库,它们对字符串编码的数字执行数学运算,例如strint或注释中建议的数字。

<强>更新

如果从外部api获取此信息,则必须自己解析JSON。 This回答对你来说可能是一个好的开始。