tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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として扱われるのでしょうか?

例として質問に出したソースコードが正確なものでなかったことをお詫びします。
それでも許していただけたら、ご教授願います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。