JSプログラミング最初の一歩 JavaScript

足し算でうまくいかないのはなぜ?

さきほどのようにpromptで値を入力し、その値を元に計算して、結果を画面に出す、というプログラムはかけ算、割り算、引き算ではうまくいきます。しかし、足し算ではうまくいきません。

num1 = prompt("値を入力してください","");
num2 = prompt("値を入力してください","");

alert( num1 + num2 );

このプログラムで、例えば最初の入力で3を、次に5を入力したとします。すると答えは8ではなく、35になってしまいます。これはなぜでしょうか?

それは、promptから返されるデータは、数値ではなく文字列だからです。
文字列であるデータを数式に使っているわけです。

しかし、それでもかけ算や割り算の時にはうまくいっていました。これはなぜでしょうか? それは、「文字列のかけ算」というものはありませんので、コンピュータが「あ、これは文字列を数値に変換してかけ算をやれということだな」と勝手に解釈してくれるからです。割り算や引き算の場合も同様です。
ところが、足し算のときだけは事情が違います。なぜなら文字列には足し算があるからです。JavaScriptでは文字列同士を足し算していると文字列の連結とみなします。ですから、「3」と「5」という文字を連結して「35」となるわけです。

では、どうしたらよいでしょうか? 正しく足し算するためには、文字列として入力された値を数値データに変換してやる必要があります。これには関数 parseIntを使用します。parseは解析するという意味、Intは整数(Integer)の意味です。文字列を整数として解釈し、値を返してくれます。

str1 = prompt("値を入力してください","");
str2 = prompt("値を入力してください","");

num1 = parseInt(str1)
num2 = parseInt(str2)

alert( num1 + num2 );

いったん str1とstr2 に入力された文字列をparseInt関数を使って数値に変換し、num1とnum2に入れています。こうするとnum1とnum2が数値になるので、うまく足し算できるわけです。

また、parseIntを使う行とpromptを使う行をまとめることも出来ます。parseInt関数の中にprompt関数を書きます。

num1 = parseInt(prompt("値を入力してください",""));
num2 = parseInt(prompt("値を入力してください",""));

alert( num1 + num2 );

parseIntの括弧の中にpromptを書いています。このように書くと、まず括弧の中のpromptから処理の実行が行われます。つまり、「値を入力してください」という画面が出て、値を入力する処理が行われます。そして、promptが返すデータ(文字列)を今度はparseInt関数が処理をして、数値データとしてnum1に返すわけです。

このようにpromptで入力した変数は常に「文字列」になるため、数値を入力してもらう場合には気をつける必要があります。数値を入力する際にはparseIntを忘れないようにしましょう。

問題5-3:
値を入力し、その値に2を足した値を表示しよう。