在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,计算结果又正确了,这原因出在哪里啊???
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,计算结果又正确了,这原因出在哪里啊???
(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
只有D是Double类型,其他都是自动类型,出现这样的作物很正常。
不要省力,一个一个定义吧。