在VB中调试以下几行代码,居然出现了完全相反的答案!Private Sub Command1_Click()
    Dim I, a, b, c, d As Double
    I = -305017.83
    a = -144819.46
    b = -160198.37
    c = -305011.83
    d = -1
    If I <> (c + d) Then
        MsgBox "不相等"
    Else
        MsgBox "相等"
    End If
End Sub我试了一下,在IF语句判断时,无论是把a+b 换成 c+d,明明是相等的,为何运算起来都不相等,这是为何啊?但把数据类型换成Currency,计算结果又正确了,这原因出在哪里啊???

解决方案 »

  1.   

    Dim I as Double, a as Double, b as Double, c as Double, d As Double
      

  2.   

    I = -305017.83
    (c + d) = (-305011.83) + (-1) = -305012.83
     
    I 本来就不等于(c+d), 呵呵,可能是你的笔误==============================================
    言归正传,由于Double是双精度浮点数,
    当(c+d)时,其c,d后面会补位进行计算得到中间结果,
    而这个结果很可能会不等于I;但你可以使用Format来
    保证,在这里,由于你只要求小数点后面两位有效数值,
    所以就可以这样处理:
    If I <> Format((c + d),"0.00") Then
      

  3.   

    错在这里:Dim I, a, b, c, d As Double
    只有D是Double类型,其他都是自动类型,出现这样的作物很正常。
    不要省力,一个一个定义吧。