- ベストアンサー
【至急】チェックボックスを用いたワリカン計算
まったくのJavaScript初心者ですが、依頼されてしまいました。 本当に困っているのでよろしくお願いします。 http://eros.boy.jp/test/ex.zip ↑のエクセルのようなものをJavaScriptで作成したいです。 単純に人数分で割るワリカン計算ではなく、各自の等級に比例してワリカンする計算です。 (1) メンバーの「重み」は各自の等級に比例します 以下に、例に出した等級を示します。岩田さんは等級1とします。 等級 名前 ------------------ 4 山田 3 佐藤 2 田中 2 相田 2 川田 2 山本 1 山田 1 岩田 (2) 支払い対象になるかどうかを、チェックボックスで選択できるようにしたいです。 チェックボックスをつけた人⇒支払い対象 チェックボックスを外した人⇒支払い対象から外れて支払いは0円 (3) 計算の手順は以下の通りです。 Step.0 支払いの合計金額を入力します。 Step.1 支払い対象者全員の合計等級(S)を算出 Step.2 割り勘するする代金CをSで割り、R=C/S を算出 Step.3 各自、R*P(加重平均)を算出(→ Excelの「分担1」) Step.4 一番上の人以外の千円未満を四捨五入する(→ Excelの「分担2」) Step.5 残りを一番上の人が払う(まとめて払って釣りをもらう) 色々がんばってみましたが出来ませんでした。。。 本当に困っています、 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
結構めんどくさい・・・ こんな感じで書いてみたがもう少し効率化できそうな予感 //hoge.htm <head> <link rel="stylesheet" type="text/css" href="hoge.css" /> <script type="text/javascript" src="hoge.js"></script> </head> <body> 支払合計:<input type="text" value="33445" id="sum_siharai"><br> 加重平均:<span id="kaju_heikin">0</span> <hr> <table id="t0"> <thead> <tr><th>等級</th><th>名前</th><th>対象</th><th>重み</th><th>分担1</th><th>分担2</th><th>分担3</th></tr> </thead> <tbody> <tr><td class="center">4</td><td>山田</td><td class="center"><input type="checkbox" checked></td><td class="center"> </td><td class="right"> </td><td class="right"> </td><td class="right" id="buntan3"> </td></tr> <tr><td class="center">3</td><td>佐藤</td><td class="center"><input type="checkbox" checked></td><td class="center"> </td><td class="right"> </td><td class="right"> </td><td class="right"> </td></tr> <tr><td class="center">2</td><td>田中</td><td class="center"><input type="checkbox" checked></td><td class="center"> </td><td class="right"> </td><td class="right"> </td><td class="right"> </td></tr> <tr><td class="center">2</td><td>相田</td><td class="center"><input type="checkbox" checked></td><td class="center"> </td><td class="right"> </td><td class="right"> </td><td class="right"> </td></tr> <tr><td class="center">2</td><td>川田</td><td class="center"><input type="checkbox" checked></td><td class="center"> </td><td class="right"> </td><td class="right"> </td><td class="right"> </td></tr> <tr><td class="center">2</td><td>山本</td><td class="center"><input type="checkbox" checked></td><td class="center"> </td><td class="right"> </td><td class="right"> </td><td class="right"> </td></tr> <tr><td class="center">1</td><td>山田</td><td class="center"><input type="checkbox"></td><td class="center"> </td><td class="right"> </td><td class="right"> </td><td class="right"> </td></tr> <tr><td class="center">1</td><td>岩田</td><td class="center"><input type="checkbox" checked></td><td class="center"> </td><td class="right"> </td><td class="right"> </td><td class="right"> </td></tr> </tbody> <tfoot> <tr><td> </td><td> </td><td> </td><td class="center" id="sum_omomi"></td><td class="right" id="sum_buntan1"> </td><td class="right" id="sum_buntan2"> </td><td class="right" id="sum_buntan3"> </td></tr> </tfoot> </table> </body> //hoge.css table#t0{ border-collapse:collapse; } table#t0 th,table#t0 td{ border:solid 1px #000000; } table#t0 td.right{ text-align:right; } table#t0 td.center{ text-align:center; } //hoge.js window.onload=function(){ init(); calc(); } function init(){ var tags=document.getElementById("t0").getElementsByTagName("input"); for(var i=0;i<tags.length;i++){ var tag=tags[i]; if(tag.type=="checkbox"){ tag.onclick=function(){ calc(); } } } document.getElementById("sum_siharai").onchange=calc; } function calc(){ var tags=document.getElementById("t0").getElementsByTagName("tbody")[0].getElementsByTagName("tr"); var v=0; var sum_omomi=0; for(var i=0;i<tags.length;i++){ var tag=tags[i]; var tds=tag.getElementsByTagName("td"); var inp=tds[2].getElementsByTagName("input")[0]; var v=inp.checked?parseInt(tds[0].innerHTML):0; tds[3].innerHTML=v; sum_omomi += v; } document.getElementById("sum_omomi").innerHTML=sum_omomi; var sum_siharai=document.getElementById("sum_siharai").value if(sum_siharai=="") sum_siharai=0; var sum_siharai=parseInt(sum_siharai); var kaju_heikin_val=parseInt(sum_siharai/sum_omomi); document.getElementById("kaju_heikin").innerHTML=setComma(kaju_heikin_val); var sum_buntan1=0; var sum_buntan2=0; var sum_buntan3=0; for(var i=1;i<tags.length;i++){ var tag=tags[i]; var tds=tag.getElementsByTagName("td"); var inp=tds[2].getElementsByTagName("input")[0]; var v=inp.checked?parseInt(tds[0].innerHTML):0; var buntan1=v * kaju_heikin_val; var buntan2=Math.round(buntan1/1000,2)*1000; tds[4].innerHTML=setComma(buntan1); tds[5].innerHTML=setComma(buntan2); sum_buntan1+=buntan1; sum_buntan2+=buntan2; } sum_buntan3=sum_siharai-sum_buntan2; document.getElementById("buntan3").innerHTML=setComma(sum_buntan3); document.getElementById("sum_buntan1").innerHTML=setComma(sum_buntan1); document.getElementById("sum_buntan2").innerHTML=setComma(sum_buntan2); document.getElementById("sum_buntan3").innerHTML=setComma(sum_buntan3); } function setComma(srcValue){ var destStr = srcValue.toString(); var tmpStr = ""; while (destStr != (tmpStr = destStr.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))) { destStr = tmpStr; } return destStr; }
その他の回答 (1)
- VCAT
- ベストアンサー率20% (16/79)
ネットでITサポート企業を検索してそこへ頼むと やってくれますよ。 一体、何様か知りませんが、「至急」だとか、なんだとか、 あんたが困っていてもこっちには関係のないことだし、 気が向いたら回答するってとこでしょ。 なんかの会員で至急やってもらう権利でももってるの? まったくずうずうしい。そんな人に対する感謝も知らない からプログラムも書けないのでしょ。 それにこういうのは丸投げっていって、このサイトでも 禁止行為に該当することですから。 プロで請け負ってるなら、金を払って聞くべき。
お礼
できました…!ぶしつけな質問だったにもかかわらずありがとうございます、何とお礼を言ったらいいのか…そして申し訳ありませんでした。書き方も何もなっていないのに答えてくださって本当にありがとうございます・・・今後気をつけたいと思います。 ありがとうございました!