アプリ版:「スタンプのみでお礼する」機能のリリースについて

少数点以下何桁かある少数の数値を20個ほど合計し、ぴったり100になる(手で計算しても)のですが、その合計を入れたセルが100であればtrueとするVBAを組んだら、なんとfalseがかえってきました。
計算違いではありません。
そういえば以前エクセルは少数計算が不得意だから少数がある場合はすべての値を1000倍するなりして計算し、最後に1000で割ればいいようなことを聞いたことを思い出しました。ほんとうでしょうか?
ほんとうだとすればなぜそんなことが起きるのでしょうか?

A 回答 (4件)

エクセルだから、じゃなくてコンピュータだから小数点の計算が苦手なのです。


丸め誤差と言います。

http://www.fuka.info.waseda.ac.jp/~kozo/suuchi/v …

http://www.kei-ha.co.jp/mag/mag0043.html

http://www001.upp.so-net.ne.jp/excel/trouble18.htm
    • good
    • 0
この回答へのお礼

いやあ、おどろきました。
勉強になりました。
ありがとうございます。

お礼日時:2003/09/12 09:05

浮動小数点演算につきものの話で、エクセルだから発生する訳ではありません。



VB Editorのイミディエイトウィンドウで,
仮に合計値がMySumとすると、? MySum - 100 の結果を表示してみてください。
E-13 あたりで誤差が出ていると思います。

ABS(MySum - 100) < 0.0001 といった条件式で、誤差が一定範囲内ならTrueとしてはいかがでしょう?
    • good
    • 0
この回答へのお礼

なるほど。
それでしたら、最初から小数ではなくして計算しようと思います。
おどろきました。
ありがとうございます。

お礼日時:2003/09/12 09:10

EXCELの問題というよりもコンピュータの問題なのかも知れません。


コンピュータでは数を小数の場合と整数の場合で分けて管理しています。

また、小数を2進数で表す際に誤差が生まれてしまいます。

ですので、人間が計算してぴったり100になると思っていても、
コンピュータ内部では100.00001とか言う風にわずかの誤差を含んでいます。

しかし、整数として扱う際には100は小数以下まで0であるという状態で管理されるので、
小数と整数を単純に比較しようとすると、
100.0001=100という風な計算になっている可能性があります。
ですのでこういった場合には
99.5以上100.5以下と言った感じで誤差をどこまで許すかまで考えたプログラムが必要になると思います。
    • good
    • 0
この回答へのお礼

なるほど。
それでしたら、最初から小数ではなくして計算しようと思います。
おどろきました。
ありがとうございます。

お礼日時:2003/09/12 09:08

そうですね、小数点の計算は苦手です。


http://homepage2.nifty.com/housaka/kitan01a.html
はちょっと批判的ですが
http://pc21.nikkeibp.co.jp/pc21/special/gosa/ind …
なら馴染みやすいかな。
    • good
    • 0
この回答へのお礼

いやあ、おどろきました。
勉強になりました。
ありがとうございます。

お礼日時:2003/09/12 09:06

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