• ベストアンサー

数字の足し算が出来ないのですが、どこが間違っているのかご教授願います

下記のようにテストしてみてるのですが、何故か数字が足し算されず文字列として認識しているようです。 Total[21]がないのですが、これは関係あるのでしょうか そしてTotal[21]を省く形で足し算をしてみてるのですが、合ってますでしょうか。先輩方のお知恵をお借り出来ましたら幸いです。 お願い致します。 Total = new Array(); Total[0]='0'; Total[1] = '16'; Total[2] = '16'; Total[3] = '16'; Total[4] = '16'; Total[5] = '16'; Total[6] = '16'; Total[7] = '16'; Total[8] = '16'; Total[9] = '16'; Total[10] = '16'; Total[11] = '16'; Total[12] = '16'; Total[13] = '16'; Total[14] = '16'; Total[15] = '16'; Total[16] = '16'; Total[17] = '16'; Total[18] = '16'; Total[19] = '16'; Total[20] = '16'; Total[22] = '16'; Total[23] = '16'; Total[24] = '16'; Total[25] = '16'; Total[26] = '16'; Total[27] = '29'; Total[28] = '17'; var total = '0'; for(i=1;i<=20;i++){ total = total + parseInt(Total[i]); } for(i=22;i<=28;i++){ total = total + parseInt(Total[i]); } document.write("+ total +");

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

・数としてあつかうならクォーテーションでくくらない ・数をたしていくなら+=演算子をつかう ・文字列変換はparseInt ・配列のすべてのデータをひろうならfor in構文をつかう 以上から <script> Total = new Array(); Total[0]='0'; Total[1] = '16'; Total[2] = '16'; Total[3] = '16'; Total[4] = '16'; Total[5] = '16'; Total[6] = '16'; Total[7] = '16'; Total[8] = '16'; Total[9] = '16'; Total[10] = '16'; Total[11] = '16'; Total[12] = '16'; Total[13] = '16'; Total[14] = '16'; Total[15] = '16'; Total[16] = '16'; Total[17] = '16'; Total[18] = '16'; Total[19] = '16'; Total[20] = '16'; Total[22] = '16'; Total[23] = '16'; Total[24] = '16'; Total[25] = '16'; Total[26] = '16'; Total[27] = '29'; Total[28] = '17'; var total=0; for(var i in Total){ total +=parseInt(Total[i]); } document.write(total); </script>

taku0
質問者

お礼

数字として扱うならクオーテーションで括っては駄目なんですね。 +=演算子を使った方が良さそうですね。 for in文で配列全てのデータを拾える方法までご教授頂きありがとうございます。 これですと気にせず拾ってくれるのは便利ですね。 有難う御座いました。

その他の回答 (3)

  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.3

このような場合は、eval() という関数を使います。 試してませんが、以下でよいのではないでしょうか。 total = eval( total + parseInt(Total[i]) );

回答No.2

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Q3843076 TestCase 1</title> <script type="text/javascript"> //<![CDATA[ function init(){ Total = new Array(); Total[0]='0'; Total[1] = '16'; Total[2] = '16'; Total[3] = '16'; Total[4] = '16'; Total[5] = '16'; Total[6] = '16'; Total[7] = '16'; Total[8] = '16'; Total[9] = '16'; Total[10] = '16'; Total[11] = '16'; Total[12] = '16'; Total[13] = '16'; Total[14] = '16'; Total[15] = '16'; Total[16] = '16'; Total[17] = '16'; Total[18] = '16'; Total[19] = '16'; Total[20] = '16'; Total[22] = '16'; Total[23] = '16'; Total[24] = '16'; Total[25] = '16'; Total[26] = '16'; Total[27] = '29'; Total[28] = '17'; //var total = '0'; // totalは0という文字列 var total = 0; //totalは0という数値 //文字列と文字列以外の間では+は文字列連結演算子。 //数字と数字の時は算術演算子。 for(i=1;i<=20;i++){ total = total + parseInt(Total[i]); } for(i=22;i<=28;i++){ total = total + parseInt(Total[i]); } //alert("+ total +"); //document.write(total.toString())の間違いじゃね?; //俺はdocument.write嫌いなのでalertをする。 alert(total.toString()); } //]]> </script> </head> <body onload="init();"> </body> </html>

taku0
質問者

お礼

toString()関数で実行結果を取得できるんですか。 まだまだ初歩的な所でつまずいてる感じなのですが、良い勉強になりました。 またalertの使い方の実例としても大変参考になります。 簡単なhtml文に掲載頂き有難う御座いました。

noname#84373
noname#84373
回答No.1

<html><body> <script> //1個ずつ代入するよりまとめてみてみては? var Total = [ 1,2,3,4,5,6,7,8,9,10 ]; //Totalの代入個数は Total.length で調べられるよ! //Totalとtotalは区別されているけど紛らわしいのでは? var total = 0; //以下繰り返し加算 for(var i=0;i<Total.length;i++) total+=Total[i]; document.write("TOTAL="+total); </script> </body></html>

taku0
質問者

お礼

lengthで個数調べられるんですか。 それをfor文で使うという事でとても参考になる事例を有難う御座います。

関連するQ&A