- ベストアンサー
型変換後の計算方法とは?
- テキスト型で保存されている数字をINT型に変換して計算する方法について教えてください。
- 現在のコードでは常に0が表示されてしまうため、効果的なアドバイスをお願いします。
- changeYosan関数を使用して、リスト内の予算、実績、伸び率を計算しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2> Q1 this.form this は、この場合自分自身です。 つまり、button エレメント自体を表すオブジェクトということになります。 this.form は、そのthis(自身のエレメント)のプロパティで エレメントが所属するフォームを表すオブジェクトです。 Q2 buttonタグの様にonclickの命令をINPUTの中に実装すればいいのでしょうか? button タグのonclick で処理を呼び出しているのは、単にそのタイミングで処理をさせたかっただけで、このことと「型変換を行った後で計算をする方法」とは無関係です。 好きなようになさればよろしいです。 Q3 その命令より前にINT型の宣言をするのはまずいでしょうか? parseInt は、既に#1で書いたように、(数値として解釈できる)文字列を受け取って整数に変換する処理です。 なので、「,」 のような場合は、あらかじめ取り除いてから渡す必要があります。 例えば parseInt(lstYosan[i].value.replace(",","")) のようにすればいいです。 「,」を小数点として使っているのであれば、 特に整数演算にこだわっているのでなければ 「.」(ピリオド)に置き換えた後 #1 でいうparseFloat を使えばいいと思います。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
簡単なサンプルを作ってみました。 ---------------------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS"> <title>Sample</title> <script type="text/javascript"><!-- function calc(f){ var Jisseki = parseInt(f.elements["_uriageJisseki"].value); var times100 = Jisseki * 100; f.result.value=times100; } //--> </script> </head> <body> <form> <INPUT type="text" name="_uriageJisseki" value="1234"> <INPUT type="text" name="result" value=""> <button type="button" onclick="calc(this.form)">100倍</button> </form> </body> </html>
補足
ありがとうございます。 考え方はだんだんわかってきました。 度々で申し訳ありませんが、 もう少しだけ教えてください。 Q1 (this.form)というのは、任意でつけた名前ですか? それとも何かの命令でしょうか? Q2 このプログラムは、テキストチェンジして、 フォーカスを移動すると値が変化するという仕組みですが、 buttonタグの様にonclickの命令をINPUTの中に 実装すればいいのでしょうか? Q3 計算式を記述しているところで小数点を消すために 置き換えの命令が実装されています。 これは、String型に対応しているメソッドだと思いますが、 その命令より前にINT型の宣言をするのはまずいでしょうか?> lstNobi[i].value = lstYosan[i].value.replace(",","") / いろいろ質問してしまいましたが、 よろしくお願いします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
整数を表す文字列なら val=parseInt("文字列"); ちなみに 小数なら val=parseFloat("文字列"); で
補足
例えば、こんな感じですか? var parseInt("_uriageJisseki"); var lstJisseki = document.form.elements("_uriageJisseki"); これでビルドしてみたんですが、 やはりゼロのままでした。 lstNobi[i].valueが恐らくNULLに なっているんじゃないかと考えているんですが。 ちなみにBODYタグで <INPUT type="hidden" style="width : 50px; text-align:right;" name="_uriageJisseki" value="${Line.売上金額}"> こういう記述をしています。 この値を元に計算します。 方向が少しズレてしまいますが、 JAVAファイルでは、リストを作成し、 そこではテキスト型で数値を入れる仕様です。 やりたい事は、テキストボックスに数値を入れて、 チェンジすると上記のスクリプトが起動し、 隣のテキストボックスの値が変わるという事がしたいのですが、 どうやっても上手くいきません。 何がいけないのでしょうか?
補足
サンプル上での考え方はわかりましたが、 こちらの方でそれを応用しようとすると やはりNULL値となって返ってきます。 値の読み込みが上手くできていないようですね。 ちなみにこう記述しています。 for(i = 0 ; lstYosan.length > i ; i ++ ){ document.form.elements[i].value = parseInt(document.Form._uriageYosan.value.replace(",","")); var lstYosan = document.form.elements[i]; //予算(売上)リスト document.form.elements[i].value = parseInt(document.Form._uriageJisseki.value); var lstJisseki = document.form.elements[i]; //実績(売上)リスト document.form.elements[i].value =document.Form._nobiritsu.value; var lstNobi = document.form.elements[i]; //伸び率リスト lstNobi[i].value = lstYosan[i].value / Jisseki[i].value * 100; //伸び率=予算(売上)÷実績(売上)×100 if(isNaN(lstNobi[i].value)){ lstNobi[i].value = 0; } } JSPでは、配列になっていてデータがグルグル回るので 上記の様に書いてみたのですが、何が原因かわかるでしょうか? 本当に何度も何度も申し訳ありません。