私は数値が浮動小数点として格納されているという印象を受けています。浮動小数点数を他の言語で比較することは信頼性が低く推奨されません。シーンの裏側にある魔法は、整数でなければならないものに対してこの作業を確実に行うためのものですか?私はこれに他の参照を見つけることができません。JavaScriptの数値の比較
答えて
JSの浮動小数点数について正しいです。言語仕様の4.3.19セクションには、
012と表示されています倍精度64ビットバイナリフォーマットIEEE 754値に対応Number値
プリミティブ値。
整数の浮動小数点比較はうまくいきます。 64b IEEE-754は、53乗に2未満の大きさの整数を正確に表すことができます(ULP参照)。この問題は、分割するか、または結果を近似する必要がある関数Math
を使用すると発生します。
浮動小数点演算の結果を最も近い整数に変換する必要がある場合は、Math.round
を使用します。
"What Every Computer Scientist Should Know about Floating Point"には丸め誤差の説明があります。
数値が整数であることがわかっている場合は、整数に変換します(たとえば、文字列として使用できる場合は、parseInt(value)
を使用して整数として比較します)。
マジック:不定、ヌル、ブール、 文字列、数値およびオブジェクト:parseInt(5) === 5; // true
のECMAScriptは、次のデータ型を持っています。 (TODO:ECMAScriptの型システムを説明 - におけるタイプ - また、一部のX参照: http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/PDF/all.pdfとhttp://c2.com/cgi/wiki?CategoryLanguageTyping)
ECMAScriptの番号は64ビットのバイナリ浮動小数点数です。 ( の詳細については、 [ECMA-262]を参照してください)。 SpiderMonkeyは(タイプ)タグ付きデータ の値を使用します。他のECMAScript番号 は、間接的に倍精度浮動小数点形式で格納されます(浮動小数点数は、 -point数( のjsval格納二重にタグ付けされたポインタ)。整数∈[-2^53,2^53] 二重に正確に記憶することができる。1
[1]
What Every Computer Scientist Should Know About Floating-Point Arithmetic (edited version)
問題は、それが大きすぎる特定の整数、
整数の、[-9007199254740992、9007199254740992](^ 53 2)を表すことができないで精度の許容範囲です。
- 1. javascript - 文字列と数値の比較
- 2. Javascriptのオブジェクト値を比較
- 3. 数値比較
- 4. Javascriptインデックスと配列の値の比較
- 5. ハッシュマップ配列の値とJavaScriptの比較
- 6. 各キーと値のJavascriptオブジェクトの比較
- 7. JavaScript配列比較関数
- 8. マージソートアルゴリズムのカウントスワップ/比較数の数値
- 9. 複数の変数の値を比較
- 10. JavaScriptの負の数値を比較するには
- 11. 数値を複数の比較演算子と値と比較する
- 12. IF文のJavaScriptブール変数の比較
- 13. Javascriptライブラリの比較
- 14. Javascriptの比較ヘルプ
- 15. Javascriptで変数の値を比較するには?
- 16. JavaScript関数は、配列内の値を比較し、それが
- 17. Javascriptの関数を比較する
- 18. JavaScript比較ステートメント
- 19. Scalaの数値型との比較?
- 20. 数値の比較 - Pythonのバグ?
- 21. 列と数値のセットの比較
- 22. SimpleDateFormatの出力と数値の比較
- 23. バッチファイルの数値とLEQの比較
- 24. jQueryの数値配列の比較
- 25. 日付をNull値で比較JavaScript
- 26. 値の比較Unix
- 27. データ値の比較
- 28. JavaScriptの配列の比較
- 29. JavaScriptのメソッドチェーニングの比較
- 30. Javascriptのプロパティの比較
JavaScriptには、整数と浮動小数点数の型がありません。整数は '数値'です。浮動小数点数も 'Number'です。 – icktoofay
私は理解しますが、あなたはそれらをintのものとして扱うことができます – Saket