重複の可能性:
Javascript で誤って丸められた多数の数値
JavaScript で数値を操作しているときに、奇妙な動作が発生します。次のコードを使用すると:
<a href="javascript:console.log({'id':9200000000032337}.id);"> CLICK HERE </a>
コンソールに920000000003233 6という番号が表示されます。丸めや数値の最大値が多いと思いますが、完全には理解できません。誰?
重複の可能性:
Javascript で誤って丸められた多数の数値
JavaScript で数値を操作しているときに、奇妙な動作が発生します。次のコードを使用すると:
<a href="javascript:console.log({'id':9200000000032337}.id);"> CLICK HERE </a>
コンソールに920000000003233 6という番号が表示されます。丸めや数値の最大値が多いと思いますが、完全には理解できません。誰?
私は Javascript の専門家ではありませんが、数値が IEEE-754 64 ビット浮動小数点数として格納されているようです。確かに、それは a の正確な値を表示する C# コードから取得したものですdouble
。
double d = 9200000000032337;
Console.WriteLine(DoubleConverter.ToExactString(d));
(私自身のDoubleConverter
クラスを使用しています。)私の出力はあなたのものと同じです:9200000000032336
浮動小数点値は、特定の有効桁数しか正確に保持できません。数値が十分に高くなると、整数でさえ正確に格納できなくなります。
ECMA-262はこれを確認しているようです:
4.3.19 倍精度 64 ビットバイナリフォーマット IEEE 754 値に対応する
数値プリミティブ値
およびセクション 7.8.3 (数値リテラル) から:
数値リテラルは Number 型の値を表します。この値は 2 つのステップで決定されます。最初に、数学的な値 (MV) がリテラルから導出されます。2 番目に、この数値は以下に説明するように丸められます。
詳細については、セクション 8.5 を参照してください。