測定した結果の各月毎の縦の合計を取りたいのですが合計の出し方が
よく分かりません。一つ一つは出るのですが、それを合計するにはどう書
けばよいのでしょうか。
具体的にはコードは次のように書きました。
<script>
var ppm=new Array(4)
ppm[0]='925,20.03,'
ppm[1]='866,25.18,'
ppm[2]='931,22.87,'
ppm[3]='789,20.04,'
document.write('<table border="1" width="300">')
for(i=0;i<ppm.length;i++){
month=ppm[i].split(',')
document.write('<tr><td>'+month[0]+'</td><td>'+month[1]+'</td></tr>')
alert(month[0]++)
}
document.write('</table>')
</script>
alert(month[0]++) で合計を出したいコラムの縦の数字(文字列)が
一つずつ表示できるのですが、それらを合計する書き方がわかりま
せん。文字列はparseFloatで数字に変換してやりました。いろいろ書
いて試してみましたがどれもうまく行きませんでした(当てっこのクイ
ズじゃないとまたいわれそうなので書きませんが)。
ご教示よろしくお願いたします。
いつも初歩的なことですいません。
--
板橋国男
ブラウザ環境:
Appname = Microsoft Internet Explorer
Appversion = 4.0 (compatible; MSIE 4.01; Windows 98)
Broswer = Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
> for(i=0;i<ppm.length;i++){
> month=ppm[i].split(',')
> document.write('<tr><td>'+month[0]+'</td><td>'+month[1]+'</td></tr>')
> alert(month[0]++)
> }
これをこう直されては(「@」のついた行を挿入しました)。
@ var total = 0
> for(i=0;i<ppm.length;i++){
> month=ppm[i].split(',')
> document.write('<tr><td>'+month[0]+'</td><td>'+month[1]+'</td></tr>')
@ total += parseFloat(month[0])
> alert(month[0]++)
> }
@ alert(total)
うー、「;」省略するの気持ち悪いなあ。あとなんで「month[0]++」なの?
> いて試してみましたがどれもうまく行きませんでした(当てっこのクイ
> ズじゃないとまたいわれそうなので書きませんが)。
いえ、板橋さんの当てっこは面白いので拝見はしたいです。
でもクイズじゃありませんけど :-) 久野
その後、データの処理のうえでA+Bの合計を次のROWの
数値の合計と合算して右端のコラムに表示する方が具合
がよいことが分かり、累計のコードにしてみました。しかし、
うまく動きません。
具体的に私の書いたコードは次のようなものです。
<script>
var ppm=new Array(4)
ppm[0]='925,21,'
ppm[1]='866,25,'
ppm[2]='931,23,'
ppm[3]='789,26,'
document.write('<table border="1" width="300">')
var temp1 = 0
for(i=0;i<ppm.length;i++){
month=ppm[i].split(',')
var total1=parseFloat(month[0])+parseFloat(month[1])
document.write('<tr><td>'+month[0]+'</td><td>'+month[1]+'</td><td>'
+temp1+total1+'</td></tr>') // 1行です
temp1=total1
}
document.write('</table>')
</script>
上のスクリプトで (temp1+total1) がどうして文字列扱いになってしまう
のか分かりません。実際の結果は
1番目のROWの累計値が 0946 (つまり、0+946)
2番目のROWの累計値が 946891 (つまり、946+891)
と合計ではなくて、文字列の連結になっています。
temp1もtotal1も数値のはずなのに、一体どうなっているんでしょうか。
私の素人考えで思いつく累計のコードはこんな感じなのですが。
もっとスマートなコードが何か他にありますでしょうか。
どなたか、コードのご批評とソリューションへのご教示よろしくお願
いたします。
--
板橋国男
(きょうは一日こんなことで終わってしまい疲れました。
アタマの悪さをつくづく思い知っています。向いてないのかなあ)
> document.write('<tr><td>'+month[0]+'</td><td>'+month[1]+'</td><td>'
> +temp1+total1+'</td></tr>') // 1行です
> 上のスクリプトで (temp1+total1) がどうして文字列扱いになってしまう
> のか分かりません。
お答えします。「+」は左から順に行われるので
'文字列' + temp1 + total1 + ...
は
('文字列' + temp1) + total1 + ...
になりますから当然文字列連結になりますよね。数値加算をさせたけれ
ば
'文字列' + (temp1 + total1) + ...
のようにかっこで囲んでそっちを先に計算させないと。
> アタマの悪さをつくづく思い知っています。向いてないのかなあ)
いえ。これは初級の人がよくつまづくあたりですから、特に向いていな
いということはないでしょう。
さらにいえば、人間が「こうあって欲しい」と期待してコードを読む
読み方と処理系の解釈が違うという問題なわけです。そこを「処理系の
解釈としてはこうだよな」と最初から考えられるようになれば中級だと
思います。
頑張ってください。 久野
> for(i=0;i<ppm.length;i++){
> month=ppm[i].split(',')
>
> var total1=parseFloat(month[0])+parseFloat(month[1])
> document.write('<tr><td>'+month[0]+'</td><td>'+month[1]+'</td><td>'
> +temp1+total1+'</td></tr>') // 1行です
> 私の素人考えで思いつく累計のコードはこんな感じなのですが。
> もっとスマートなコードが何か他にありますでしょうか。
> どなたか、コードのご批評とソリューションへのご教示よろしくお願
> いたします。
批判と言うわけではありませんが奇異に感じることは,
ppm[i]のデータが'925,21,'となっているのに,それをわざわざ925と21に分けて別に
列に表示させているのはなぜ?(余計分かりにくいと思うけど。)
スマートかどうかは分かりませんが,私なら素直に表示と計算は別にして考えます
が。
例えば,板橋さんのコードを借りるなら,
var ppm = new Array(4)
ppm[0]='925,20.03,';
ppm[1]='866,25.18,';
ppm[2]='931,22.87,';
ppm[3]='789,20.04,';
var sum = 0, tmpnum = 0;
document.write('<table border="1" width="300">');
for(i=0; i < ppm.length; i++){
tmpnum = ppm[i].replace(/,/g, "") - 0;
sum += tmpnum;
sum = Math.round(sum*100)/100;
document.write('<tr><td>'+ppm[i]+'</td><td>'+sum+'</td></tr>');
}
document.write('</table>');
と言った感じにします。
In message news:Gf%xb.773$747...@news1.dion.ne.jp
"ITAHASHI Kunio" <kunit...@h2.dion.ne.jp> wrote ...
> alert(month[0]++) で合計を出したいコラムの縦の数字(文字列)が
合計の方は久野さんが書いてあるので、++ の方ですが、
month[0]++ は「評価(演算に利用)してから加算する」なので、
上記の式だと、
alert(month[0]);
month[0] = month[0] + 1;
と同じ意味になります。
month はループ上で上書きされますし、1 を加算することに
意味はありませんので、++ は必要ないです。
あと、合計に関するよくある例として以下のようなものが
ありますので、参考まで。
var i, s;
s = 0;
for ( i=1; i <= 10; i++ )
s += i; // s = s + i;
alert( s );
>
> お答えします。「+」は左から順に行われるので
>[........]
目からウロコです。
いままで、自分のために( )を入れてました。
>
> さらにいえば、人間が「こうあって欲しい」と期待してコードを読む
>読み方と処理系の解釈が違うという問題なわけです。そこを「処理系の
>解釈としてはこうだよな」と最初から考えられるようになれば中級だと
>思います。
>
アドバイスありがとうございます。
そうなれるように頑張りたいと思います。
いろいろすいません。
--
板橋国男
>
>批判と言うわけではありませんが奇異に感じることは,
>ppm[i]のデータが'925,21,'となっているのに,それをわざわざ925と21に分けて別
に
>列に表示させているのはなぜ?(余計分かりにくいと思うけど。)
自分の書いたのをいじり回しているうちに変なものに
なってしまったのを送ってしまったようです。配列にも
余計なセパレートがついていたりして。あと、簡略にする積りで
小数点のあるデータを小数点以下削ったりしてしまいました。
数字には意味は特にありません。
分かりにくくてすいませんでした。気をつけます。
>スマートかどうかは分かりませんが,私なら素直に表示と計算は別にして考えます
>が。
>例えば,板橋さんのコードを借りるなら,
>
>var ppm = new Array(4)
>ppm[0]='925,20.03,';
>ppm[1]='866,25.18,';
>ppm[2]='931,22.87,';
>ppm[3]='789,20.04,';
>var sum = 0, tmpnum = 0;
>document.write('<table border="1" width="300">');
>for(i=0; i < ppm.length; i++){
> tmpnum = ppm[i].replace(/,/g, "") - 0;
> sum += tmpnum;
> sum = Math.round(sum*100)/100;
> document.write('<tr><td>'+ppm[i]+'</td><td>'+sum+'</td></tr>');
>}
>document.write('</table>');
>
コードありがとうございました。
鴻池さんのを参考にさせていただいて、なんとかできました。
> sum += tmpnum;
に気づきませんでした。納得です。
またよろしくお願いいたします。
--
板橋国男
ご説明ありがとうございました。
納得です。
>あと、合計に関するよくある例として以下のようなものが
>ありますので、参考まで。
>
> var i, s;
> s = 0;
> for ( i=1; i <= 10; i++ )
> s += i; // s = s + i;
> alert( s );
ありがとうございます。
ループの演習で教科書にのってました。問題は応用力ですね。
このNGに参加されているとても頼れるやさしい方たちのお蔭
でJavaScriptを続けられるのですが、何といったらいいでしょ
うか、今はせっかくF1カーに乗せてもらっているのに田舎道を
仮免運転してるみたいな状態です。
そんなもったいない環境ですが、いつか、みなさんをうならせ
るような質問ができるようになるまで頑張ります。
まだまだですね。ふぅ。
またよろしくお願いいたします。
--
板橋国男
/*
ニュースに160KBもある投稿をする非常識な人がいるので、
対策として、まずヘッダーのみをダウンロードしたあと、必要な
メッセージを取るようにしています。2度手間でイラつきますが、
そのためにお返事が遅れることがあるかとも思います。
*/