web-dev-qa-db-ja.com

JavaScriptは64ビット整数をサポートしていますか?

私は次のコードを持っています:

var str = "0x4000000000000000";   //4611686018427387904 decimal
var val = parseInt(str);
alert(val);

この値を取得します: "4611686018427388000 "、つまり0x4000000000000060

JavaScriptが64ビット整数を誤って処理しているのか、それとも何か間違っているのか疑問に思っていました。

72
ahmd0

JavaScriptは IEEE-754 倍精度(64ビット)形式を使用して数値を表します。私が理解しているように、これは53ビットの精度、つまり15から16桁の10進数を提供します。あなたの番号は、JavaScriptが対応できない桁数を持っているため、近似値になります。

これは実際には「誤操作」ではありませんが、大きな数値で完全な精度が必要な場合は明らかにあまり役に立ちません。 BigNumberInt64 など、より大きな数を処理できるJSライブラリがいくつかあります。

79
nnnnnn

Chromiumバージョン57以降は、任意精度整数をネイティブでサポートしています。これはBigIntと呼ばれ、他のブラウザでも 作業中 です。 JavaScriptの実装よりも 劇的に高速 です。

8
Shnatsel