• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:計算結果がおかしい)

計算結果がおかしい

このQ&Aのポイント
  • 本体金額と消費税率を入力して税込金額を計算する関数を作成しました。
  • しかし、一部の計算結果が正しくない場合があります。
  • 小数点以下を切り捨てることで解決できますが、原因は何でしょうか。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答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>本体金額&nbsp;<input type="text" value="0" class="right" name="text4">円</p> <p>消費税率&nbsp;<input type="text" value="0" class="right" name="text5">%</p> <p>税込金額&nbsp;<input type="text" value="0" class="right" name="text6" onFocus="zei(this)">円</p> </form>

super_step
質問者

お礼

yambejp様 早速の回答、ありがとうございました。 整数同士の掛け算を優先すれば誤差が少なくなるのですね。 そこまで考えなければいけないとは知らなかったので、勉強になりました。 ご親切にソースまで記述してくださり、感謝しております。 本当にありがとうございました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

機械の内部では2進計算をしているので、ある範囲の誤差が出ることがあります。 でも、ご質問の程度の計算でしたら、なるべく整数計算を優先させるようにして、 document.form1.text4.value*(1*document.form1.text5.value+100)/100; のようにすれば、よろしいかと。(割算を最後に行なうようにしている)

super_step
質問者

お礼

fujillin様 2進数で計算しているがゆえの誤差だったのですね。 わたくしの様な初心者にも分かりやすい説明、 本当にありがとうございました。 回答をくださった皆様への感謝の度合いは同じですので、 順番付けはしたくありませんが、 ベストアンサーは、回答の早かった順とさせていただきました。