parseInt
を通過する際の数値が他の数値に変更されています。JSON構文解析により特定の数値がsomethigに変換されます
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
での作業や数は、結果の数値を変更しているとJSONにstr
を変えました。 10153315281647666
が大文字で正しく解析されているのに対して、10153315281647663
はそうではありませんが、これは何の背後にあるのでしょうか。整数スタックのオーバーフローが原因ではありません。
私はすべてを文字列に解析することで問題を解決しましたが、その原因は何ですか?
しかし、結果は、 "予期しない"、あるいはランダムでていないようです。いくつかは正しく解析されており、いくつかは解析されておらず、結果は常に特定の数値に対して正確に同じです。その背後には理由がありますか? – developernaren
@developernaren:それは最下位ビットが失われているからです。私は説明を追加しようとします。 – Cerbrus
私は本当にそれがテキストの壁になることなく適切な説明を思い付くことができません。なぜあなたはあなたが見ている数字を見ているのかを説明するより良いリソースがあります:http://blog.vjeux.com/2010/javascript/javascript-max_int-number-limits.html – Cerbrus