- ベストアンサー
計算結果がおかしい
- 本体金額と消費税率を入力して税込金額を計算する関数を作成しました。
- しかし、一部の計算結果が正しくない場合があります。
- 小数点以下を切り捨てることで解決できますが、原因は何でしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
整数同士の掛け算をしてから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>
その他の回答 (1)
- fujillin
- ベストアンサー率61% (1594/2576)
機械の内部では2進計算をしているので、ある範囲の誤差が出ることがあります。 でも、ご質問の程度の計算でしたら、なるべく整数計算を優先させるようにして、 document.form1.text4.value*(1*document.form1.text5.value+100)/100; のようにすれば、よろしいかと。(割算を最後に行なうようにしている)
お礼
fujillin様 2進数で計算しているがゆえの誤差だったのですね。 わたくしの様な初心者にも分かりやすい説明、 本当にありがとうございました。 回答をくださった皆様への感謝の度合いは同じですので、 順番付けはしたくありませんが、 ベストアンサーは、回答の早かった順とさせていただきました。
お礼
yambejp様 早速の回答、ありがとうございました。 整数同士の掛け算を優先すれば誤差が少なくなるのですね。 そこまで考えなければいけないとは知らなかったので、勉強になりました。 ご親切にソースまで記述してくださり、感謝しております。 本当にありがとうございました。