• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:自動計算の追加質問)

小数点以下の数値を使いたい場合に合計がおかしくなる問題

このQ&Aのポイント
  • 英語のサイトで小数点以下の数値を使用したい場合、合計が正しく表示されない問題が発生しています。
  • 例えば、商品サンプル1を1つ選ぶと合計は36.99であるはずなのに、36.989999999999995と表示されます。
  • この問題の解決策を教えてください。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

これはIEEE 754といって結構面倒な話なのですが、手っ取り早くは一度整数化してから 小数点に戻すことです。 (これも完全ではないですが、命題の例であれば正しくなるはずです) function keisan(){ var price1 = document.form1.goods1.selectedIndex * 29.99; document.form1.field1.value = price1.toString(); var price2 = document.form1.goods2.selectedIndex * 6; document.form1.field2.value = price2.toString(); var price3 = ((price1 || price2) ? 7: 0).toString(); document.form1.field3.value = price3; var total = (price1*100+price2*100+price3*100)/100; document.form1.field_total.value = total; } 興味があれば以下のサイトを参照ください http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml

20131129
質問者

お礼

yambejpさん、どうもありがとうございました! 感謝感謝です!!

20131129
質問者

補足

やってみました。上のスクリプトをそのままペーストしてみました。すると、、、、 おお!!すばらしい。できました!

その他の回答 (1)

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

10進数の整数を前提とする金額計算に、 2進数の浮動小数点数を使うのは、 精度とか丸めなどの問題により、 計算額に誤差が含まれるという問題があります。 ですので通常は整数で計算して、 表示だけを小数点っぽく見せる手段を使います。 var total = 2999 * 1 + 700; (total / 100 | 0) + "." + (total % 100) // "36.99" ですが以下の様にすれば、 大抵の場合で表示上は問題なく見せることができます。 var total = 29.99 * 1 + 7; total.toString() // "36.989999999999995" total.toFixed(2) // "36.99" ただしこれは誤差を見えにくくしているだけなので、 本気でやるなら必ず整数を使ってください。

20131129
質問者

お礼

ありがとうございました!