数式の演算結果があるべき答えと等しくならない理由は?

Question 85.5 Excel VBA Borad (掲示板)より Previous Next
if then文を作成しているのですが、以下の数式がなぜか Falseとして認識されてしまいます。
  if 28.1 = 3.4 + 24.7 then ~
最初はDoubleによる不一致かと思い、ウォッチ式で確認しましたが、数値は一致します。(変数に格納しても同様)
他の数値については等式が成り立っており、原因が特定できておりません。
基本的なことかも知れないのですが、他のサイト等を検索しても全くわからなかったので、どなたかわかられる方ご回答をいただけると助かります。 よろしくお願いします。
Answer   2007.10.20 永井善王
確かにそうなりますね。

ちなみに、下記マクロで 3.4 から 0.1 刻みで For...Next すると 右図のとおり、22.6 で誤差が発生し、
28.1 は 28.1000000000001 になってしまいます。

しかし、セルの値を数式で加算すると、C1セルのように正確な答が返ります。

よって、 
if 28.1 = 3.4 + 24.7 then ~  とコーディングすることはないはずですから、打開策が必要でしたら実際のコードを示して、博雅の批正を仰がれると良いと思います。
    Cells.ClearContents
    Columns("A:A").NumberFormatLocal = "0.0000000000000_ "
    j = 1
    For i# = 3.4 To 28.3 Step 0.1
        Cells(j, 1) = i#
        j = j + 1
    Next
ありがとうございました
ご回答方、ありがとうございました。やはり小数点以下の数値によるものだったのですね。
ウォッチによる数値確認だと28.1以下の数値は表示されていなかったので原因が特定できず困り果てて降りました。ちなみに実際のコードは以下のとおりで、入力されたデータベースの値のエラーチェックを行うものでした。
    If A <> B + c Then                          'A:計 B,C:内訳項目
        Sheet2.Cells(y, x) = "エラー"
    End If
必要桁数によるラウンド算出し、対応をしていきたいと思います。
まったく分からなかったので大変助かりました。重ねてお礼申し上げます。
Answer   2007.10.28 井川はるき
ウォッチウィンドウなどで丸められた値を見ても、浮動小数点誤差は判断できないでしょう。
この処理の場合、Currency型かDecimal型で比較すればよろしいかと思います。

if 28.1@ = 3.4@ + 24.7@ then のようなことです。

if 28.1@ = 3.4 + 24.7 then だけでもいいですけどね。

 

Excel VBA Macro