つい集めてしまうものはなんですか?

計算結果がおかしい

<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」と表示されます。
小数点以下を切り捨てれば済む話ですが・・・・・
計算結果が違っているのが気になります。
これは何故なのでしょう?

原因がおわかりの方がおられましたら、ご教示ください。
どうか宜しくお願いいたします。

A 回答 (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>
    • good
    • 0
この回答へのお礼

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

本当にありがとうございました。

お礼日時:2010/06/07 13:33

機械の内部では2進計算をしているので、ある範囲の誤差が出ることがあります。



でも、ご質問の程度の計算でしたら、なるべく整数計算を優先させるようにして、
document.form1.text4.value*(1*document.form1.text5.value+100)/100;
のようにすれば、よろしいかと。(割算を最後に行なうようにしている)
    • good
    • 0
この回答へのお礼

fujillin様

2進数で計算しているがゆえの誤差だったのですね。
わたくしの様な初心者にも分かりやすい説明、
本当にありがとうございました。

回答をくださった皆様への感謝の度合いは同じですので、
順番付けはしたくありませんが、
ベストアンサーは、回答の早かった順とさせていただきました。

お礼日時:2010/06/07 13:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報