タイトル : Re^4: IF文 複数条件判定のバグ 投稿日 : 2009/07/31(Fri) 13:50 投稿者 : おーたか
るしぇ様 再回答ありがとうございます。 > こっちの環境では引っ掛かったよ。 > デバッグ出力して具体的な検証結果を示してください。 こちらでも質問で出した例題では引っかかりましたが、 実際のプログラムでは引っかかりませんでした。 本当のコードは、次のように、 Public変数をBBB()でセットし、AAA()で比較します。 まさかローカル変数の場合とPublic変数の場合で、 このような違いが生まれるとは思わず、 例題として単純にするように、ローカル変数として1関数内にまとめてしまいました。 お手数をおかけして申し訳ありませんでした。 引っかからなかった実際の例) public alpha as single public beta as single public gannma as single public r as inetger private sub BBB() alpha = 0.0035 beta = -2.33 gannma = 2.72 r = 40 end sub private sub AAA() Dim a As Double = CDbl(alpha) Dim b As Double = CDbl(beta) Dim c As Double = CDbl(gannma) Dim d As Integer = r Dim o As Object Debug.WriteLine(a) Debug.WriteLine(b) Debug.WriteLine(c) Debug.WriteLine(d) If Not (a = 0.0035) Then Debug.WriteLine("Not a") o = 0.0035 Debug.WriteLine(o.GetType) Debug.WriteLine(o) Debug.WriteLine(0.0035 - a) End If If Not (b = -2.33) Then Debug.WriteLine("Not b") o = -2.33 Debug.WriteLine(o.GetType) Debug.WriteLine(o) Debug.WriteLine(-2.33 - b) End If If Not (c = 2.72) Then Debug.WriteLine("Not c") o = 2.72 Debug.WriteLine(o.GetType) Debug.WriteLine(o) Debug.WriteLine(2.72 - c) End If If Not (d = 40) Then Debug.WriteLine("Not d") o = 40 Debug.WriteLine(o.GetType) Debug.WriteLine(o) Debug.WriteLine(40 - d) End If If a = 0.0957 AndAlso b = 2.84 AndAlso c = -0.8 AndAlso d = 40 Then kuiki = "(あ)" ElseIf a = 0.0194 AndAlso b = -0.56 AndAlso c = 2.18 AndAlso d = 20 Then kuiki = "(い)" ElseIf a = 0.0027 AndAlso b = 8.51 AndAlso c = 1.2 AndAlso d = 20 Then kuiki = "(う)" ElseIf a = 0.0095 AndAlso b = 0.37 AndAlso c = 1.4 AndAlso d = 40 Then kuiki = "(え)" ・・・ ・・・ ElseIf a = 0.0035 AndAlso b = -2.33 AndAlso c = 2.72 AndAlso d = 40 Then kuiki = "(こ)" ・・・ Else kuiki = "ERROR!!!" End If End Sub 以上の場合だと、ELSE文に行ってしまいます。 -----------------Doubleでキャストした場合の結果 0.00350000010803342 -2.32999992370605 2.72000002861023 40 Not a System.Double 0.0035 -1.08033418582537E-10 Not b System.Double -2.33 -7.62939453835543E-08 Not c System.Double 2.72 -2.86102292967882E-08 ------------------- -------------------a,b,c,dをSingleのまま使った場合の結果 0.0035 -2.33 2.72 40 Not a System.Double 0.0035 -1.08033418582537E-10 Not b System.Double -2.33 -7.62939453835543E-08 Not c System.Double 2.72 -2.86102292967882E-08 ------------------- > [比較演算子 (Visual Basic)] > http://msdn.microsoft.com/ja-jp/library/cey92b0t(VS.80).aspx > 数値の比較として型変換されることは書いてありました。 上記ホームページ見てみました。 別な型同士の比較は、型変換すると書いてありましたが、 今回の場合はどちらもSingleです。 それでもpublic変数ではdoubleとして扱われるのでしょうか? 例として質問に出したソースコードが正確なものでなかったことをお詫びします。 それでも許していただけたら、ご教授願います。 |