JavaScriptでファンクションを使って計算する方法

このQ&Aのポイント
  • JavaScriptのファンクションを使って、特定の値を計算する方法について質問です。質問文章中には、特定の値を取得し、計算を行うためのスクリプトが記述されています。しかし、DBから値を取得する際に、計算ができずに0の値が返される現象が起きています。この問題の原因について教えてください。
  • 質問文章中のスクリプトは、特定の値を取得し、計算を行うためのものですが、DBから値を取得する場合に問題が発生しています。値が0ではない場合に計算を行うようにコードが書かれているはずですが、なぜか0の値が返されてしまいます。この問題の原因と解決策について教えてください。
  • JavaScriptのファンクションを使って特定の値を計算する方法について質問です。質問文章中には、値を取得し計算を行うためのスクリプトが記述されていますが、DBから値を取得する際に計算ができずに0の値が返されてしまいます。この問題の原因について詳しく説明していただけますか?また、解決策はありますか?
回答を見る
  • ベストアンサー

ファンクションで計算する

<SCRIPT language="JavaScript">  function changeArariYosan() {   sum();  }  function sum() {   var sumArariYosan = 0;   var lstArariYosan = document.form.elements("_arariYosan");  for(i = 0 ; lstArariYosan.length > i ; i ++ ){   if(lstArariYosan[i].value.replace(",","") == "" |   isNaN(lstArariYosan[i].value.replace(",",""))){ sumArariYosan = 0; break;   }   sumArariYosan += parseInt(lstArariYosan[i].value.replace(",",""),10);//予算(売上) }  document.form.elements("_sumArariYosan").value = addComma(sumArariYosan.toString());  } /*addCommaは、カンマ編集のメソッド*/ bodyの中でこういう記述があります。 <html:text disabled="true" property="_arariYosan" styleClass="hankaku_right_text" onchange="changeArariYosan()" value="${Line.荒利予算}" /> DBより抽出した値で計算をするんですが、 この荒理予算の部分をvalue="1000"にすると きちんと計算を行ってくれます。 しかし、上記の様にDBから抽出する記述に変更すると 計算ができず、0の値が返ってきてしまうのです。 何がいけないのでしょうか?

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

  • ベストアンサー
  • agricap
  • ベストアンサー率40% (79/195)
回答No.1

DBから正しく抽出できていないのではないでしょうか? changeArariYosan() を呼ばないように変えて、表示がどう なるかみればいいと思います。

takahiro_k
質問者

お礼

ありがとうございました。 おかげでなんとかできあがりました。

関連するQ&A

  • 型変換を行った後で計算をする方法

    DBには、テキスト型で保存している数字があります。 それをJSP側でINT型に変換して、 計算を行いたいのですが、何か良い方法はありませんか? 下記のままだと常に0が表示されてしまいます。 どうか良いアドバイスをお願いします。 function changeYosan() {  var lstYosan = document.form.elements("_uriageYosan");  var lstJisseki = document.form.elements("_uriageJisseki");  var lstNobi = document.form.elements("_nobiritsu"); for(i = 0 ; lstYosan.length > i ; i ++ ){   lstNobi[i].value = lstYosan[i].value.replace(",","") /     lstJisseki[i].value * 100; if(isNaN(lstNobi[i].value)){   lstNobi[i].value = 0; } } }

  • 同じFunctionで、同じ計算させたいのですが

    私は今、以下のようにここで教えていただいたプログラムを参考に組んでは見たものの、同じ行をいくつもコピペすると計算されなくなってしまいます。1行だけの計算でしようとするとうまく計算されるのですが・・・ <HTML> <HEAD> <TITLE> タイトルバーに表示されるテキスト </TITLE> <SCRIPT LANGUAGE="JavaScript"> <!--JavaScript function SUM(){ if(!isNaN(document.sum.text1.value) && !isNaN(document.sum.text2.value) && !isNaN(document.sum.text3.value) && document.sum.text1.value && document.sum.text2.value && document.sum.text3.value){ document.sum.text4.value = eval(document.sum.text1.value) + eval(document.sum.text2.value) - eval(document.sum.text3.value) } if( !isNaN(document.sum.text5.value) && !isNaN(document.sum.text6.value) && document.sum.text5.value && document.sum.text6.value){ document.sum.text7.value = eval(document.sum.text4.value) + eval(document.sum.text5.value) + eval(document.sum.tex6.value) } } //--> </SCRIPT> </HEAD> <BODY> <FORM NAME="sum" onSubmit="SUM();return false;"> A<INPUT TYPE="text" NAME="text1" onChange="SUM()" SIZE="10"><BR> B<INPUT TYPE="text" NAME="text2" onChange="SUM()" SIZE="10"><BR> C<INPUT TYPE="text" NAME="text3" onChange="SUM()" SIZE="10"><BR> D=A+B-C<INPUT TYPE="text" NAME="text4" onChange="SUM()" SIZE="10"><BR> E<INPUT TYPE="text" NAME="text5" onChange="SUM()" SIZE="10"><BR> F<INPUT TYPE="text" NAME="text6" onChange="SUM()" SIZE="10"><BR> G=D+E+F<INPUT TYPE="text" NAME="text7" onChange="SUM()" SIZE="10"><BR> </FORM> </BODY> </HTML>

  • 異なるフォームから呼び出したfunctionの計算をしたい

    以下のようなコードがあります <script type="text/javascript"> <!-- function keisan1(FRM){ // ################ 販売価格欄計算 ############### //コンマを外す txt = 5; // テキストボックスの数 for(i=0; i<txt; i++) { if(FRM.elements[i].value != "") { FRM.elements[i].value = FRM.elements[i].value.replace( /,/g, '');} } //数字かどうかチェック for(i=0; i<txt; i++) { if (FRM.elements[i].value.match(/[\D]/g)){ window.alert("今入力した文字が不正です。半角数字で入力してください。"); return(false); // 計算中止 } } //本体価格欄の計算する txt = 4; // 計算するテキストボックスの数 ttl = FRM.hk5.value*0; for(i=0; i<txt; i++) { if(FRM.elements[i].value != "") { ttl += eval(FRM.elements[i].value);} } FRM.hk5.value = ttl-(FRM.hk2.value*2); //コンマ処理 txt = 5; // コンマをつけるテキストボックスの数 for(i=0; i<txt; i++) { if(FRM.elements[i].value != "") { FRM.elements[i].value = FRM.elements[i].value.replace( /,/g, '').replace( /((?:^[-+])?\d{1,3})(?=(?:\d\d\d)+(?!\d))/g, '$1,');} } }//############## 販売価格計算ここまで ############### こういった感じのものが 4つあります で それぞれの合計額を 最後にたして総合計したいのですが まず それぞれの呼び出しが別々のフォームになっていまして HTMLは <form name="rei1"> onclick="keisan1(this.form)" </form> と言う感じで keisan1から4まで作りました また、HTMLもフォーム名 rei1からrei4まであります 総合計計算をするときに onclick="sougoukei()" として念のため各項目の合計計算(小計を出す感じです)し直してから 各項目をたして総合計にしたいのですが function sougoukei(){ keisan1(); keisan2(); keisan3(); keisan4(); ここから各小計をたして総合計を出す } としたいのですが うまくいきません ( )の中に何か書かないといけないようなんですが this.form でも合計が出ない FRMとうっても  FRM.elements[...]はnullかオブジェクトではないと言う感じのエラー が出ます それぞれの小計計算はうまく動いています。 何をどうしたらうまくいくのかよく分かりません どなたかご教授お願いします よろしくお願いします

  • 価格計算フォーム作成について

    初心者です。次のような書籍注文フォームを作成しております。 (BODYタグも必要の場合お教え下さい。) CGIは借りており、テーブルの数など変更するとうまく送信できないようです。 フォームへは、各冊数、合計冊数、送料、合計金額の順に入力できるようなっております。また、実際は、書籍(1)、(2)のみ現在使用できるようなっています。 修正しているのですが、動作が正しく動いてくれない状況です、どこを変えたら正しく動作しますでしょうか? 申し訳ありませんが、なかなか解決せずご教示いただけると嬉しいです。 以下コード↓ ------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 6.5.2.0 for Windows"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>書籍販売 メイン</TITLE> <SCRIPT language="JavaScript"> <!-- //冊数を記述(フォームを使用できるのは書籍(1)、(2)のみ。(3)~(7)は記録として残されている。) function CountBooks() { // var i1 = document.form.書籍(1).selectedIndex; // var i2 = document.form.書籍(2).selectedIndex; // var i3 = document.form.書籍(3).selectedIndex; // var i4 = document.form.書籍(4).selectedIndex; // var i5 = document.form.書籍(5).selectedIndex; // var i6 = document.form.書籍(6).selectedIndex; // var i7 = document.form.書籍(7).selectedIndex; var i1 = document.form1.elements[14].selectedIndex; var i2 = document.form1.elements[15].selectedIndex; var i3 = document.form1.elements[16].selectedIndex; var i4 = document.form1.elements[17].selectedIndex; var i5 = document.form1.elements[18].selectedIndex; var i6 = document.form1.elements[19].selectedIndex; var i7 = document.form1.elements[20].selectedIndex; //送料計算(書籍(1)(単価:300円)のみ適用。1~5冊なら160円、6冊以上なら960円。)) function GetSouryou(i1) { var iSouryou = 0; if (i1 < 1) iSouryou = 0; else if (i1<6 ) iSouryou = 160; else if (i1 < 1000) iSouryou = 960; else iSouryou = 0; } //書籍(1)の単価×冊数を計算 var ikakaku1 = document.form1.elements[14].selectedIndex; * 300; //書籍(2)の単価×冊数を計算   var ikakaku2 = document.form1.elements[15].selectedIndex; * 1000; //合計金額を計算 function GetGoukeiKinGaku(iCount,iSouryou, iKakaku1, iKakaku2) { var iGoukei = 0; iGoukei = (iSouryou * iKakaku2)+ikakaku1; iGoukei = Math.floor(iGoukei); iGoukei = Kanma(iGoukei); document.form1.elements[23].value = iGoukei; } //数値に3桁カンマを追加 function Kanma(iValue) { iValue=new String(iValue); Leng=iValue.length; if(Leng%3 == 0) Atai=Leng/3-1; else Atai=Math.floor(Leng/3); i=3; for(j=0; j<Atai; j++) { iValue=iValue.substring(0,Leng-i)+','+iValue.substring(Leng-i,Leng); Leng++; i++; i+=3; } return iValue; } //--> </SCRIPT> <STYLE type="text/css"> <!-- INPUT{ text-align : left; } .TEXT_RIGHT{ text-align : right; } .style1 {font-size: 2} --> </STYLE> </HEAD> -----------------------------------------------------------

  • javaの計算に関する質問です。

    以下のプログラムで、画像の矢印のように処理ができたのですが、(4)と(5)の計算値などを用いて更に計算をするにはどう記述すればよいのですか?できれば画像の赤○で囲ったような感じで四則演算したいのですが…よろしくお願いします。 <html> <body> <script type="text/javascript"> var rslt1 = 0; var rslt2 = 0; var rslt3 = 0; function hoge1(){ var a=document.getElementById('a').value; var b=document.getElementById('b').value; var rslt; if (a==1 && b==1) { rslt1=100; } else { if (a==1 && b==2) { rslt1=90; } else { if (a==2 && b==1) { rslt1=80; } else { rslt1=70; }}} document.getElementById('txt1').value=rslt1; sum1(); } function hoge2(){ var a=document.getElementById('a').value; var c=document.getElementById('c').value; var rslt; if (a==1 && c==1) { rslt2=95; } else { if (a==1 && c==2) { rslt2=85; } else { if (a==2 && c==1) { rslt2=75; } else { rslt2=65; }}} document.getElementById('txt2').value=rslt2; sum1(); sum2(); } function hoge3(){ var a=document.getElementById('a').value; var d=document.getElementById('d').value; var rslt; if (a==1 && d==1) { rslt3=60; } else { if (a==1 && d==2) { rslt3=50; } else { if (a==2 && d==1) { rslt3=40; } else { rslt3=30; }}} document.getElementById('txt3').value=rslt3; sum2(); } function sum1() { document.getElementById('txt4').value=rslt1 + rslt2; } function sum2() { document.getElementById('txt5').value=rslt2 + rslt3; } </script> <select id="a" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="b" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="c" onChange="hoge2()"> <option value="1">1<option value="2">2 </select> <select id="d" onChange="hoge3()"> <option value="1">1<option value="2">2 </select><p> <input type="text" id="txt1" value=""><p> <input type="text" id="txt2" value=""><p> <input type="text" id="txt3" value=""><p> <input type="text" id="txt4" value=""><p> <input type="text" id="txt5" value=""><p> </body> </html>

    • ベストアンサー
    • Java
  • javascriptの計算結果をweb上に表示

    WEB上で入力した数値から複数の計算をさせ、それをフォームからcgiに送るjavascriprを組みたいと思っています。 【現在保有のスクリプト】 下記のスクリプト1では、text1 text2 欄に数値を入力した後、「計算」ボタンを押し、送信ボタンを押すと、計算結果をcgiに送ることが可能です。 (下記の場合は、「入力数値の和」と「積」の2つの数値の送信する) 【やりたいこと】 text1 text2 欄に数値を入力した後、「計算」ボタンを押したあとに、「和と積がブラウザ上に表示され、確認した後に「送信ボタン」を押せるようにしたい。 ということで、修正したのがスクリプト2です。 【質問事項】 スクリプト2では、スクリプト1をベースに javascript上に msg.innerHTML = msg; msg2.innerHTML = msg2; を加え、 HTML上に <p id="msg"></p> <p id="msg2"></p> を加えていますが、これでは動きません。 上記に加え function readText() { var text1 = document.getElementById(""); などのパーツを入力する必要があるはずだと思うのですが、いろいろな場所に試行錯誤しておりますが、うまくいきません。 ご教示いただきたくお願いいたします。 【スクリプト1】************************************************ <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>test</title> <script type="text/javascript"> <!-- //@cc_on document./*@if(1) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/ 'click', function( evt ) { var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/ var v1, v2, msg, sum, msg2, sum2; if( t.type == 'button' && t.name == 'calc' && t.form.id == 'form2' ) { v1 = t.form.elements['text1'].value; v2 = t.form.elements['text2'].value; if ( isNaN( v1 ) || v1 == '' || isNaN( v2 ) || v2 == '' ) { msg = '数字以外の文字が入ってます'; } else { sum = parseFloat( v1 ) * parseFloat( v2 ); msg = '積は、' + sum + 'です'; sum2 = parseFloat( v1 ) + parseFloat( v2 ); msg2 = '和は、' + sum2 + 'です'; } t.form.elements['plus'].value = msg; t.form.elements['plus2'].value = msg2; } }, false ); //--> </script> </head> <body> <form action="form30.cgi" method="post" name="form2" id="form2"> <fieldset> <input type="text" id="text1" name="text1" size="10" maxlength="10" />+ <input type="text" id="text2" name="text2" size="10" maxlength="10" /> <input type="button" value="計算" name="calc" /> <br> <input type="hidden" name="plus" value=""> <input type="hidden" name="plus2" value=""> <input type="submit" value="送信" /> </fieldset> </form> </body> </html> **************************************************************** 【スクリプト2】上記を改造しweb上で計算結果を表示させたい******** <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>test</title> <script type="text/javascript"> <!-- //@cc_on document./*@if(1) attachEvent( 'on' + @else@*/ addEventListener( /*@end@*/ 'click', function( evt ) { var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/ var v1, v2, msg, sum, msg2, sum2; if( t.type == 'button' && t.name == 'calc' && t.form.id == 'form2' ) { v1 = t.form.elements['text1'].value; v2 = t.form.elements['text2'].value; if ( isNaN( v1 ) || v1 == '' || isNaN( v2 ) || v2 == '' ) { msg = '数字以外の文字が入ってます'; } else { sum = parseFloat( v1 ) * parseFloat( v2 ); msg = '積は、' + sum + 'です'; sum2 = parseFloat( v1 ) + parseFloat( v2 ); msg2 = '和は、' + sum2 + 'です'; } t.form.elements['plus'].value = msg; t.form.elements['plus2'].value = msg2; msg.innerHTML = msg; msg2.innerHTML = msg2; } }, false ); //--> </script> </head> <body> <form action="form30.cgi" method="post" name="form2" id="form2"> <fieldset> <input type="text" id="text1" name="text1" size="10" maxlength="10" />+ <input type="text" id="text2" name="text2" size="10" maxlength="10" /> <input type="button" value="計算" name="calc" /> <br> <input type="hidden" name="plus" value=""> <input type="hidden" name="plus2" value=""> <p id="msg"></p> <p id="msg2"></p> <input type="submit" value="送信" /> </fieldset> </form> </body> </html> ****************************************************************

  • JavaScriptの計算のNaNの判定について…

    いろいろなアドバイスを参考に以下のようなプログラムを作り、値が正の時はちゃんと計算されるのですが負の時はNaNと判定されてしまいます。どうしたら負の場合でもちゃんと計算されますか?いろいろ調べたのですが見つかりませんでした…。よろしくお願いします。 <html> <body> <script type="text/javascript"> var rslt1 = 0; var rslt2 = 0; var rslt3 = 0; function hoge1(){ var a=document.getElementById('a').value; var b=document.getElementById('b').value; var rslt; if (a==1 && b==1) { rslt1=-100; } else { if (a==1 && b==2) { rslt1=-90; } else { if (a==2 && b==1) { rslt1=-80; } else { rslt1=-70; }}} document.getElementById('txt1').value=rslt1; sum1(); } function hoge2(){ var a=document.getElementById('a').value; var c=document.getElementById('c').value; var rslt; if (a==1 && c==1) { rslt2=-95; } else { if (a==1 && c==2) { rslt2=-85; } else { if (a==2 && c==1) { rslt2=-75; } else { rslt2=-65; }}} document.getElementById('txt2').value=rslt2; sum1(); sum2(); } function hoge3(){ var a=document.getElementById('a').value; var d=document.getElementById('d').value; var rslt; if (a==1 && d==1) { rslt3=-60; } else { if (a==1 && d==2) { rslt3=-50; } else { if (a==2 && d==1) { rslt3=-40; } else { rslt3=-30; }}} document.getElementById('txt3').value=rslt3; sum2(); } function sum1() { document.getElementById('txt4').value=rslt1 + rslt2; } function sum2() { document.getElementById('txt5').value=rslt2 + rslt3; } function sum3() { document.getElementById('txt6').value=((document.getElementById('txt4').value + rslt2 + document.getElementById('txt5').value * 2) / 4); } </script> <select id="a" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="b" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="c" onChange="hoge2()"> <option value="1">1<option value="2">2 </select> <select id="d" onChange="hoge3()"> <option value="1">1<option value="2">2 </select><p> <input type="text" id="txt1" value=""><p> <input type="text" id="txt2" value=""><p> <input type="text" id="txt3" value=""><p> <input type="text" id="txt4" value=""><p> <input type="text" id="txt5" value=""><p> <input type="text" id="txt6" value=""><p> </body> </html>

  • greasemonkeyでfunction動かない

    greasemonkeyでスクリプトを作成したいのですが、テスト用に書いたjavascriptをぐれもんに設定したところ、スクリプトが起動しなくなりました。 ※javascript、greasemonkey共に初心者です。 ご指摘いただけると幸いです。 HTML部分は、既存のサイトにつき変更できないため、ぐれもん(JS)にて、追加機能を持たせたい。 ======= 作成したサンプルソース JSで作成した、最下部の入力文字を発送日窓複数に一括反映するためのスクリプトです。 ======= <SCRIPT LANGUAGE="JavaScript"> <!-- window.onload=function(){ var myForm=document.createElement('form'); myForm.setAttribute("name","frm_test2"); var inps=new Object; inps[0]=document.createElement('input'); inps[0].setAttribute("type","text"); inps[0].setAttribute("name","atai"); inps[0].setAttribute("value",""); inps[1]=document.createElement('input'); inps[1].setAttribute("type","button"); inps[1].setAttribute("onClick",'test()'); inps[1].setAttribute("value","実行"); for(var i in inps){ myForm.appendChild(inps[i]); } document.body.appendChild(myForm); } function test(){ num = document.rjForm2.length for (var i=0; i<num; i++){ formname = document.rjForm2[i].name; formname=formname.substring(0,13); if (formname=="shipping_date"){ document.rjForm2[i].value = document.frm_test2.atai.value; } } } //--> </SCRIPT> <body> <form name="rjForm2"> <table> <tr> <td> <input type="text" name="shipping_date_123456-12345678-123456781">発送日 </td> </tr> <tr> <td> <input type="text" name="pay_date_123456-12345678-123456781">振込日 </td> </tr> </table> <table> <tr> <td> <input type="text" name="shipping_date_123456-12345678-123456785">発送日 </td> </tr> <tr> <td> <input type="text" name="pay_date_123456-12345678-123456785">振込日 </td> </tr> </table> </form> </body> ====== 上記JS部分を以下のようにgreasemonkeyに反映した経緯と、結果 ・サイトで見つけたサンプルを元にwindow.onloadの前後は、()を使ったら、この部分は、実行できた。 ・しかし、function test部分は、()を使ってもできず、firebugでは、「test is not defined」と出て、発送日窓に一括登録ができない。 ====== 以下、greasemonkeyに設定したスクリプト ( window.onload=function(){ var myForm=document.createElement('form'); myForm.setAttribute("name","frm_test2"); var inps=new Object; inps[0]=document.createElement('input'); inps[0].setAttribute("type","text"); inps[0].setAttribute("name","atai"); inps[0].setAttribute("value",""); inps[1]=document.createElement('input'); inps[1].setAttribute("type","button"); inps[1].setAttribute("onClick",'test()'); inps[1].setAttribute("value","実行"); for(var i in inps){ myForm.appendChild(inps[i]); } document.body.appendChild(myForm); }()); function test(){ num = document.rjForm2.length for (var i=0; i<num; i++){ formname = document.rjForm2[i].name; formname=formname.substring(0,13); if (formname=="shipping_date"){ document.rjForm2[i].value = document.frm_test2.atai.value; } } } ======= 何卒よろしくお願いいたします。

  • javascriptの入力制限keycode除く

    はじめまして javascript初心者です テキストエリアに数字のみ入力できるようにしたいと思い 以下のとおりソースを記述しました function numCheck(){ var num = document.frm.txt.value; var cnum = num.replace(/[^0-9]/,""); num = cnum; document.frm.txt.value = num; <form name = "frm"> <input type="text" onkeypress="numCheck()" value="txt"> </form> キーコードによる入力制限は考えません あと何が足りないでしょうか? よろしくご教授くださいm(__)m

  • VBSからjavascript

    下記ソースの指定の箇所からjavascriptのfunction fun1(1)をよびたいのですがどう記述したらいいでしょうか。 (ちなみにbody onload=は使わない条件です) <%@ LANGUAGE = VBSCRIPT %> <html> <head> <script type="text/javascript"> <!-- //禁止、許可 function fun1(is){ var is; var i; var jj; jj=document.form1.text2.length; for (i=0;i<jj;i++){ if (is==1) document.form1.text2[i].disabled=true; if (is==2) document.form1.text2[i].disabled=false; } } //--> </script> </head> <html> <body> <form name="form1"> <input type="text" name="text2" size="14" maxlength="8" value="ABC"> <input type="text" name="text2" size="14" maxlength="8" value="DEF"> <% <-------------------ここでfun1(1)をよびたい fun(1)と書いてもエラー >% </form> </body> </html>

専門家に質問してみよう