- ベストアンサー
エクセルは少数点以下の計算が苦手?
少数点以下何桁かある少数の数値を20個ほど合計し、ぴったり100になる(手で計算しても)のですが、その合計を入れたセルが100であればtrueとするVBAを組んだら、なんとfalseがかえってきました。 計算違いではありません。 そういえば以前エクセルは少数計算が不得意だから少数がある場合はすべての値を1000倍するなりして計算し、最後に1000で割ればいいようなことを聞いたことを思い出しました。ほんとうでしょうか? ほんとうだとすればなぜそんなことが起きるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
エクセルだから、じゃなくてコンピュータだから小数点の計算が苦手なのです。 丸め誤差と言います。 http://www.fuka.info.waseda.ac.jp/~kozo/suuchi/value/value_2.html http://www.kei-ha.co.jp/mag/mag0043.html http://www001.upp.so-net.ne.jp/excel/trouble18.htm
その他の回答 (3)
- kiriku
- ベストアンサー率41% (195/468)
浮動小数点演算につきものの話で、エクセルだから発生する訳ではありません。 VB Editorのイミディエイトウィンドウで, 仮に合計値がMySumとすると、? MySum - 100 の結果を表示してみてください。 E-13 あたりで誤差が出ていると思います。 ABS(MySum - 100) < 0.0001 といった条件式で、誤差が一定範囲内ならTrueとしてはいかがでしょう?
お礼
なるほど。 それでしたら、最初から小数ではなくして計算しようと思います。 おどろきました。 ありがとうございます。
- ceita
- ベストアンサー率24% (304/1218)
EXCELの問題というよりもコンピュータの問題なのかも知れません。 コンピュータでは数を小数の場合と整数の場合で分けて管理しています。 また、小数を2進数で表す際に誤差が生まれてしまいます。 ですので、人間が計算してぴったり100になると思っていても、 コンピュータ内部では100.00001とか言う風にわずかの誤差を含んでいます。 しかし、整数として扱う際には100は小数以下まで0であるという状態で管理されるので、 小数と整数を単純に比較しようとすると、 100.0001=100という風な計算になっている可能性があります。 ですのでこういった場合には 99.5以上100.5以下と言った感じで誤差をどこまで許すかまで考えたプログラムが必要になると思います。
お礼
なるほど。 それでしたら、最初から小数ではなくして計算しようと思います。 おどろきました。 ありがとうございます。
- Hageoyadi
- ベストアンサー率40% (3145/7860)
そうですね、小数点の計算は苦手です。 http://homepage2.nifty.com/housaka/kitan01a.html はちょっと批判的ですが http://pc21.nikkeibp.co.jp/pc21/special/gosa/index.shtml なら馴染みやすいかな。
お礼
いやあ、おどろきました。 勉強になりました。 ありがとうございます。
お礼
いやあ、おどろきました。 勉強になりました。 ありがとうございます。