JavaScriptを利用してフォームに入力したデータを計算をしたいです。
詳しく説明すると利用者が入力するデータは2で(それぞれA、Bとします)A÷B×100-50をしたいです
割り算は小数第4位を四捨五入して小数第3位までの概数にしたいです。
またそれを並べてさらに計算をしたいです。
イメージはこんな感じです
テキスト テキスト テキスト
テキスト [フォーム] [フォーム] [計算結果] ←ここに上記の計算をします
テキスト [フォーム] [フォーム] [計算結果]
テキスト [フォーム] [フォーム] [計算結果]
テキスト 上3段の和 上3段の和 [計算結果] ←ここも上記の計算をします
テキスト [フォーム] [フォーム] [計算結果]
テキスト [フォーム] [フォーム] [計算結果]
テキスト 上5段の和 上5段の和 [計算結果] ←上3段の和は含みません もしくは上3段の和から下の3段までの和
テキスト [フォーム] [フォーム] [計算結果]
テキスト [フォーム] [フォーム] [計算結果]
テキスト [フォーム] [フォーム] [計算結果]
テキスト [フォーム] [フォーム] [計算結果]
テキスト 上9段の和 上9段の和 [計算結果] ←上3段の和・上5段の和は含みません もしくは上5段の和から下の5段までの和
[計算] ←[計算]ボタンを押すと一気に計算
本当に初心者で説明がうまくできません。申し訳ございませんが誰か知識をお貸しください。
No.4ベストアンサー
- 回答日時:
こんにちは
小計のようになっている行の3列目は、同じ計算式で計算するのか、単に上の行の小計を求めるのかがよくわかりませんが、適当に、同様の計算式と解釈。
HTMLはTableが良いのかも知れませんが、form>p>input の形式にしてあります、
入力値が整数値限定で良ければ、input type="number" としておくことで、自動制御が可能ですが、よくわからなかったのでtextのままです。
ですので、数値以外も入力できてしまいますが、「数値に換算できないものは0と見なす」という極めて大雑把なチェックのみを行っています。
計算式内に除算があることもあり、数値でないものが存在する場合は NaN、Infinity などのエラー値がそのまま表示されます。(処理をしていませんので…)
文章の解釈が合っているかよくわかりませんが、こんな感じでしょうか?
実際になさりたい内容によって、もっと適切な方法が考えられる可能性は高いと思いますが、説明文からだけで思いつくひとつの方法例として。
「calcボタン」(=submitボタン)で計算するようにしてありますが、フォーム中でのリターンキー押下げはサブミットになるので、そちらでも計算は実行されます。)
※ let calc =~~ の行が計算式を定義している部分ですので、この計算式を変えれば、ご指定の計算式を変更することも可能です。
<!DOCTYPE HTML>
<html lang="ja">
<head><title></title>
<style type="text/css">
#f1 p{ margin: 0.3em 0; }
#f1 input{ width: 8em; margin: 0 1em; border:1px solid gray; }
#f1 input:nth-child(3), #f1 .subT input{ background-color:#F0F0F4; }
</style>
</head>
<body>
<form id="f1">
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p class="subT"><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p class="subT"><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="text" /><input type="text" /><input type="text" /></p>
<p class="subT"><input type="text" /><input type="text" /><input type="text" /></p>
<p><input type="submit" style="margin-top:2em;" value="calc" /></p>
</form>
<script type="text/javascript">
(() => {
let toFloat = (n) => parseFloat(n)?parseFloat(n):0;
let calc = (a, b) => (toFloat(a) * 100 / toFloat(b) - 50).toFixed(3);
let inps = document.querySelectorAll("#f1 input");
let inp3 = document.querySelectorAll("#f1 input:nth-child(3)");
let subT = document.querySelectorAll("#f1 .subT");
let subInp = document.querySelectorAll("#f1 .subT input");
let sumN = [3, 3, 5];
inp3.forEach(e => { e.readOnly = true; });
subInp.forEach(e => { e.readOnly = true; });
/*** サブミット時の処理 ***/
document.getElementById("f1").addEventListener("submit", e => {
e.preventDefault();
/* 小計計算 */
for(let i=0; i<3; i++){
subT[i].querySelectorAll("input").forEach(e => {
let t = 0, n = Array.prototype.indexOf.call(inps, e);
for(let j=0; j<sumN[i]; j++) t += toFloat(inps[n - j * 3 - 3].value);
e.value = t.toFixed(3);
});
}
/* 3列目の計算 */
inp3.forEach(e => {
let e1 = e.previousSibling;
e.value = calc(e1.previousSibling.value, e1.value);
});
});
})();
</script>
</body>
</html>
No.5
- 回答日時:
No4です
HTMLもどうするのか不明なままでのサンプル回答ですので、No4はあくまでも参考としてのものです。
実際は、データのチェックや使い勝手・操作性なども考慮しながら再構築する必要があるものと思いますが、実現方法のひとつのサンプルとしてのものです。
No4の計算方法はinput要素だけを対象にして計算していますので、その他の要素が間に入ったとしても、以下の点を除いてはそのまま成立するものと思います。
HTMLの構成によって影響を受ける可能性があるのは、3列目の要素を「nth-child」で識別していますので、それが変わる場合は「last-child」あるいはその他のclassなどを別途に設けて識別するなどといったようにすることで対応可能と思います。
補足でご提示のような、「単純なテキスト行を挿入する」というような程度であれば、何の影響はないので、そのままでも計算はできるはずと思います。
No.3
- 回答日時:
最初の1段目だけA÷B×100-50の計算を作った。
これを参考に、計算の行数をプラスしていけば良い
小数第3位までとか、全角数字も対応させるとかは、今日は時間ないので
、今回はこれで
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form>
<label for="textForm">計算する: </label>
<input type="text" id="textForm">
<input type="text" id="textForm2">
<button id="button">計算する</button>
</form>
<label for="resultForm">取得した値: </label>
<input type="text" id="resultForm">
</body>
<script>
var button = document.getElementById("button");
button.addEventListener("click", function(e) {
e.preventDefault();
var textForma = document.getElementById("textForm").value;
var textForma2 = document.getElementById("textForm2").value;
var result = textForma/textForma2*100-50
var resultForm = document.getElementById("resultForm");
resultForm.value = result;
});
</script>
</html>
No.2
- 回答日時:
そうですね、ハートって、笑
とりあえず、JavaScriptの四則演算と、変数、Domの知識はつけといて、ネットで調べらるでしょう
明日時間あったら、code書いてみるから、ちょっと待ってね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux linuxシェルスクリプト(baシェル)でファイルにかかれた数式を評価し計算する方法を教えてください 1 2022/08/26 14:28
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- JavaScript 空白で入力フォームのボタンをクリックしたら、ブラウザの上部からjavascriptで 表示されるアラ 1 2022/05/20 11:16
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 統計学 不偏分散を計算するときに標準偏差和をn-1で割りますが、なぜ-1なのでしょうか? 「なぜnでなくn- 5 2022/07/04 14:54
- 妊娠・出産 妊娠検査薬チェックワン及び他の妊娠検査薬は、最終性交渉から3週間後での最終判断とのことですが、3週間 1 2022/03/31 15:31
- 数学 WolfarmAlpha計算機 計算結果がおかしい 2 2022/07/02 15:42
- Chrome(クローム) Chromeの描画領域を2分割して異なるスクロール位置を同時に表示させることはできますか 1 2023/03/01 16:53
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
Accessを開きなおすとテキスト...
-
エクセルのフィルタ抽出が固まる
-
警察はスマホに保存した動画や...
-
最新の日付とその金額をクエリ...
-
ACCESSのSQLで、NULLかNULLでな...
-
Excelフィルタ抽出で「検索して...
-
Accessのリンクテーブルについて
-
android版のMs accessはありま...
-
リスト形式の表とデータベース...
-
更新クエリをリンクデータベー...
-
googleフォームでインストール...
-
CSVファイルでテキストの改行の...
-
c言語の問題です。これを踏まえ...
-
20万行あるデータを動かしたい
-
accessでのフォームの連携について
-
カラム上の重複を削除するクエ...
-
sql update で 抽出条件データ...
-
Accessフォームで平均値の出し...
-
データベースとウェブ(WWW)の共...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースファイル(.db)を開...
-
警察はスマホに保存した動画や...
-
Accessを開きなおすとテキスト...
-
ACCESSのSQLで、NULLかNULLでな...
-
エクセルのフィルタ抽出が固まる
-
CSVファイルでテキストの改行の...
-
Accessフォームからパラメータ...
-
旧filemakerで和暦(令和など)...
-
ファイルが壊れて読み取れませ...
-
Accessのリンクテーブルについて
-
更新クエリをリンクデータベー...
-
リスト形式の表とデータベース...
-
縦書きテキストボックスの表示"...
-
Notion@リレーション値の取得...
-
汎用カード型のデータベースソ...
-
「1004:アプリケーション定義...
-
構文エラー:演算子がありませ...
-
c言語の問題です。これを踏まえ...
-
20万行あるデータを動かしたい
-
accessでの請求管理について
おすすめ情報
データは2で ではなく データは2つで でした。すみません。
小計のようになっている行の3列目は、同じ計算式で計算していただいて大丈夫です。
四捨五入は除算の部分の商を小数第3位までにする= ×100をするので計算結果は小数第1位まで ということでした。説明不足ですみません。(3)のところを変更すればよいでしょうか?
また、各列にテキスト(題名)を入れたいです。
テキスト← テキスト← テキスト←
[フォーム][フォーム][計算結果]
[フォーム][フォーム][計算結果]←先頭行のみでOK
どうしたらよいでしょうか。
お忙しいところ申し訳ございません。