web-dev-qa-db-ja.com

JavaScript演算でよくある間違い

私はJavaScriptの浮動小数点演算を使用していくつかの奇妙なことに遭遇しましたが、頭の上からそれらを思い出すことはできません!

JavaScriptを使用して数学を行うときによくある間違いは何ですか?

5
Derek Adair

JavaScriptの算術に関する一般的な問題は、parseIntの使用、またはその欠如に関連しています。

文字列を整数に変換するときに基数を使用しない:

parseInt("0137"); // 95!
parseInt("0137", 10); // 137

算術演算でparseIntをまったく使用しない:

var a = "2";
alert(a + 5); // 25
alert(a - 5): // -3!

浮動小数点演算の誤解(JSだけでなく、すべての言語に適用されます):

alert(23 * 1.40 == 32.2); // false, 23 * 1.40 is represented as 32.199999999
alert((23 * 1.40).toFixed(1) == 32.2); // true

浮動小数点で通貨を計算すると、丸めエラーが発生する可能性があります。通貨の値は、処理する前に整数(100倍)として扱う必要があります。

7
Tatu Ulmanen

よくある間違い(浮動小数点数ではなく、文字列と整数の場合)は、JavaScriptに強い型付けがないことを忘れていることです。したがって、次のような状況に遭遇する可能性があります。

var myVar = 7;       // 7
myVar += 5;          // 12

var myVar = "7";     // 7
myVar += 5;          // 75

var myVar = "cat";   // cat
myVar += 5;          // cat5

これらはすべて、JavaScriptで完全に有効なステートメントです。

しかし、 "7"と "cat"はどちらも文字列ですが、すべての文字列が同じように扱われるわけではないため、奇妙になります。

var myVar = 77;
parseInt(myVar);     // 77

var myVar = "77";
parseInt(myVar);     // 77

var myVar = "cat";
parseInt(myVar);     // NaN

var myVar = "77cat";
parseInt(myVar);     // 77

それは言うまでもありません(@Tatuが書いたように):

var myVar = "077";
parseInt(myVar);     // 63
4
Dori