私は次のコードを持っています:
var str = "0x4000000000000000"; //4611686018427387904 decimal var val = parseInt(str); alert(val);
この値を取得します: "4611686018427388000 "、つまり0x4000000000000060
4611686018427388000
0x4000000000000060
JavaScriptが64ビット整数を誤って処理しているのか、それとも何か間違っているのか疑問に思っていました。
JavaScriptは IEEE-754 倍精度(64ビット)形式を使用して数値を表します。私が理解しているように、これは53ビットの精度、つまり15から16桁の10進数を提供します。あなたの番号は、JavaScriptが対応できない桁数を持っているため、近似値になります。
これは実際には「誤操作」ではありませんが、大きな数値で完全な精度が必要な場合は明らかにあまり役に立ちません。 BigNumber や Int64 など、より大きな数を処理できるJSライブラリがいくつかあります。
Chromiumバージョン57以降は、任意精度整数をネイティブでサポートしています。これはBigIntと呼ばれ、他のブラウザでも 作業中 です。 JavaScriptの実装よりも 劇的に高速 です。