- ベストアンサー
小数点以下の数値を使いたい場合に合計がおかしくなる問題
- 英語のサイトで小数点以下の数値を使用したい場合、合計が正しく表示されない問題が発生しています。
- 例えば、商品サンプル1を1つ選ぶと合計は36.99であるはずなのに、36.989999999999995と表示されます。
- この問題の解決策を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これは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
その他の回答 (1)
- Ogre7077
- ベストアンサー率65% (170/258)
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" ただしこれは誤差を見えにくくしているだけなので、 本気でやるなら必ず整数を使ってください。
お礼
ありがとうございました!
お礼
yambejpさん、どうもありがとうございました! 感謝感謝です!!
補足
やってみました。上のスクリプトをそのままペーストしてみました。すると、、、、 おお!!すばらしい。できました!