計算結果がおかしい
<form name="form1">
<h2>消費税計算</h2>
<p>本体金額<input type="text" value="0" class="right" name="text4">円</p>
<p>消費税率<input type="text" value="0" class="right" name="text5">%</p>
<p>税込金額<input type="text" value="0" class="right" name="text6" onFocus="zei()">円</p>
</form>
htmlで上記のようなテキストフィールドを3つ作成し、それぞれ上から順に
[text4~text6]の名前をつけています。
本体金額(text4)と消費税率(text5)に入力された値をもとに、
text6に税込金額を表示するように以下の関数をjavascriptで<head>タグ間に記述しました。
<script type="text/javascript">
<!--
function zei(){
document.form1.text6.value=document.form1.text4.value*(1+document.form1.text5.value/100);
}
//-->
</script>
実際に値を入力してみると、計算結果が正常な場合とそうでない場合があります。
例えば、本体金額のボックスに500、消費税率の欄に10と入力すると、550と表示され
問題はないのですが、本体金額を200に変更すると
「220.00000000000003」と表示されます。
小数点以下を切り捨てれば済む話ですが・・・・・
計算結果が違っているのが気になります。
これは何故なのでしょう?
原因がおわかりの方がおられましたら、ご教示ください。
どうか宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
整数同士の掛け算をしてから10のn乗でわれば誤差はすくなくなります。
<script>
function zei(obj){
var f=obj.form;
f.elements["text6"].value=parseInt(f.elements["text4"].value)*(100+parseInt(f.elements["text5"].value))/100;
}
</script>
<form id="form1">
<h2>消費税計算</h2>
<p>本体金額<input type="text" value="0" class="right" name="text4">円</p>
<p>消費税率<input type="text" value="0" class="right" name="text5">%</p>
<p>税込金額<input type="text" value="0" class="right" name="text6" onFocus="zei(this)">円</p>
</form>
yambejp様
早速の回答、ありがとうございました。
整数同士の掛け算を優先すれば誤差が少なくなるのですね。
そこまで考えなければいけないとは知らなかったので、勉強になりました。
ご親切にソースまで記述してくださり、感謝しております。
本当にありがとうございました。
No.2
- 回答日時:
機械の内部では2進計算をしているので、ある範囲の誤差が出ることがあります。
でも、ご質問の程度の計算でしたら、なるべく整数計算を優先させるようにして、
document.form1.text4.value*(1*document.form1.text5.value+100)/100;
のようにすれば、よろしいかと。(割算を最後に行なうようにしている)
fujillin様
2進数で計算しているがゆえの誤差だったのですね。
わたくしの様な初心者にも分かりやすい説明、
本当にありがとうございました。
回答をくださった皆様への感謝の度合いは同じですので、
順番付けはしたくありませんが、
ベストアンサーは、回答の早かった順とさせていただきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームの内容でリンク先URLの...
-
ページ間で変数を保持したい
-
TextBoxに半角数字以外を入れた...
-
JSPでonChangeを強制発行するに...
-
テキストボックスに文字飾り表...
-
プルダウンで選択された値を別...
-
大文字か小文字かを判断する方法
-
画面表示時の初期フォーカスの...
-
JavaScriptからphp関数の呼び出し
-
【Javascript】(テキストボッ...
-
ラジオボタンのNullチェック
-
slickのレスポンシブ > center...
-
【javascript】連想配列からセ...
-
テーブルの変数について
-
return trueとreturn falseの用...
-
JavaScriptでテーブルをクリッ...
-
POST時に要素を削除してからPOST
-
HTMLのフォーム名とJavaScript...
-
ボタン無しでフォーム内容送信
-
チェックボックスにチェックが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TextBoxに半角数字以外を入れた...
-
ページ間で変数を保持したい
-
HTMLファイル同士での値渡し
-
tabindexの取得
-
プルダウンで選択された値を別...
-
フォームの内容でリンク先URLの...
-
マイナスなら赤字で表示したい...
-
テキストエリアに履歴を残したい
-
テキストボックスに入力した色...
-
どちらかひとつのテキストボッ...
-
HTMLとJavaScriptで作った表示...
-
イベント発生順序
-
GetElementByIdがうまく取得で...
-
VBSからjavascript
-
VBscriptの配列変数をJavascrip...
-
VBScriptでpingを実行(ブラウザ...
-
JSPでonChangeを強制発行するに...
-
大文字か小文字かを判断する方法
-
javascriptのちょっとした動作...
-
テキストボックスのフォーカス移動
おすすめ情報