減算/マイナス記号

JavaScriptで減算(引き算)を行うには-(マイナス)記号を使います。例えば7から3を減算する場合には以下のように記述します。(サンプル01を実行する)

7-3

0から値を減算する場合には0を省略して-4のように記述することができます。変数名の前に-記号を付けた場合には、変数値の符号は反転することになります。例えば変数aに5の値が入っており-aとすると結果は-5になります。変数aに-9の値が入っている場合に-aとすると符号が反転し9となります。

多くの数を減算する場合には-記号を続けて記述します。例えば10から4と2と1を減算する場合には以下のように記述します。(サンプル02を実行する)

10-4-2-1

-の前後に半角の空白やタブが入っていても問題なく動作します。半角空白ではなく全角空白を入れた場合にはブラウザによって動作が異なります(サンプル03を実行する)。Windows版のInternet ExplorerやOpera、Firefoxでは全角空白も半角空白と同様に扱われるため、正しい計算結果が返されます。これ以外のブラウザ、例えばMacOS X版のSafari 2やInternet Explorer 5ではエラーになります。ごく稀に気づかずに全角空白が入ってしまい、自分が使用しているブラウザ以外でエラーになってしまう場合には、このような部分も再確認してみてください。

JavaScriptでは数値は整数だけでなく小数値も扱うことができます。小数値を扱う場合でも、特に数値の前後に記号を付けたり変換するためのメソッドを使用する必要はありません。例えば5.37から0.5を減算する場合には以下のように記述します。(サンプル04を実行する)

5.37-0.5

小数値を使用する場合には演算誤差には注意が必要です。多くのブラウザでは内部での数値表現がBCD (Binary Code Decimal) ではなく2nまたは2-nで表現されるため、計算結果が正しい値にならないことがあります。例えば1から0.1を3回引くと0.7になるはずですが、多くのブラウザでは0.7000000000000001のように異なる結果(近似値)になってしまいます。例外的に内部演算をBCDで行っているMac版のiCabでは、このような演算誤差は生じません。(サンプル05を実行する)
小数値での演算誤差を防ぐには、10倍してから演算し、その後に10で除算するという方法を利用します(これはゲタを履かせるとも言われます)。1から0.1を3回引く場合には以下のように10倍してから最後に10で除算します(有効桁数分だけゲタを履かせればよい)。(サンプル06を実行する)

(10-1-1-1)/10

一般的なプログラム言語では文字列から数値を減算することはできませんが、JavaScriptでは自動的に型変換が行われ計算結果が返されます。例えば文字列の"10"から数値の2を減算するには以下のように記述します。(サンプル07を実行する)

"10"-2

文字列から数値でなく数値から文字列を減算することもできます。例えば数値の10から文字列の2を減算するには以下のように記述します。(サンプル08を実行する)

10-"2"

直接、文字列と数値でなく変数やプロパティ値での減算でも同様の処理が行われます。例えば変数aに文字列の10、変数bに数値の4が入っており、変数aから変数bを減算する場合は以下のようになります。(サンプル09を実行する)

a = "10";
b = 4;
document.write(a-b);

-記号での数値演算が不可能な場合にはJavaScriptはエラーを返さずに、NaN (Not a Number) を返します。(サンプル10を実行する)
JavaScriptでは最大値/最小値、無限大の値、負の無限大の値を扱うことができますが、これらからも減算することは可能です。ただし、無限大から値を減算しても結果は無限大 (Infinity) になります。(サンプル11を実行する)

JavaScriptの-記号は数値の減算のみで文字列から特定の文字だけを減算することはできません。ただし、Stringオブジェクトのsplit()メソッドを使用することで文字列の減算を行うことができます。split()メソッドのパラメータに減算したい文字列を指定し、その結果(配列)を全て連結します。例えば、日本語の文字列内から、(読点)だけを減算するには以下のように記述します。(サンプル12を実行する)

str = "あら、いい天気。う〜ん、出かけましょうか。";
str = str.split("、");
txt = "";
for (var i=0; i<str.length; i++) txt += str[i];
document.write(txt);

また、JavaScriptが扱えるのは実数のみで虚数(i)は扱うことができません。虚数が扱えないので複素数も扱うことはできません。

最終更新日:2007年1月4日
>目次に戻る