我发现某些号码在通过parseInt
时正在更改为其他号码。JSON解析将某些号码转换为其他
console.log(parseInt(10153315281647662, 10)); //10153315281647662
console.log(parseInt(10153315281647663, 10)); //10153315281647664
console.log(parseInt(10153315281647664, 10)); //10153315281647664
console.log(parseInt(10153315281647665, 10)); //10153315281647664
console.log(parseInt(10153315281647666, 10)); //10153315281647666
console.log(parseInt(10153315281647667, 10)); //10153315281647668
console.log(parseInt(10153315281647668, 10)); //10153315281647668
console.log(parseInt(10153315281647669, 10)); //10153315281647668
console.log(parseInt(10153315281647660, 10)); //10153315281647660
var str = '{ "id" : 10153315281647663 }';
console.log( JSON.parse(str)) // id : 10153315281647664
我与几个大的数字和parseInt
工作或改变str
以JSON与数量在不断变化的结果的数字。这不是因为整数堆栈溢出,因为较大的数字10153315281647666
解析正确,而10153315281647663
不是,这背后的原因是什么?
我已经解决了所有问题,解决了问题,但是这是什么原因?
但结果似乎并没有被 “意外”,甚至是随机的。一些正在解析正确,有些不是,结果总是完全相同的一个给定的数字。这背后有理由吗? – developernaren
@developernaren:那是因为最不重要的位丢失了。我会(尝试)添加一个解释。 – Cerbrus
没有它,我不能真正拿出一个正确的解释,导致墙壁的文字。这里有更好的资源可以解释为什么你看到你看到的数字:http://blog.vjeux.com/2010/javascript/javascript-max_int-number-limits.html – Cerbrus