请告诉我,如何从json中获取数字,为什么在数字的末尾出现零?
var a = '{ "n": 870744036720833075 }';
var json = JSON.parse(a);
document.getElementById('test').innerHTML = json.n; // 870744036720833000 why?
我该如何解决这个问题?
答案 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回答对你来说可能是一个好的开始。