Office中国论坛/Access中国论坛

标题: 关于计算出错的问题 [打印本页]

作者: chenwm1973    时间: 2008-3-14 12:59
标题: 关于计算出错的问题
Private Sub CommandButton1_Click() '保存
'先进行数据校对,保证数据准确
'TextBox2=TextBox3+TextBox4
Dim nVbResult As VbMsgBoxResult
Dim nTempD(3) As Double
For i = 0 To 3
    nTempD(i) = 0
Next
nTempD(0) = Val(TextBox2.Text)
nTempD(1) = Val(TextBox3.Text)
nTempD(2) = Val(TextBox4.Text)
nTempD(3) = (nTempD(1) + nTempD(2))

If nTempD(0) <> nTempD(3) Then
    nVbResult = MsgBox("数据输入有误,是否要保存?" & Chr(13) & "点击‘是’,保存数据;否则不保存。", vbYesNo + vbInformation, "错误信息")
    If nVbResult = vbNo Then
        TextBox2.SetFocus
        TextBox2.SelStart = 0
        TextBox2.SelLength = Len(TextBox2.Text)
        Exit Sub
    End If
End If
end sub

如上代码(代码已简略)。
为什么在输入某些数据时会出错:如输入
TextBox2.Text=8.569
TextBox3.Text=5.569TextBox4.Text=3

而输入8.568=5.568+3 时,则不会。
以前也没有发生过此类事情。如能解答,不胜感激!
我的是OFFICE2003_sp3版的。
作者: tanhong    时间: 2008-3-14 13:57
这个和你定义数组为Double有关
Private Sub CommandButton1_Click() '保存

Dim nVbResult As VbMsgBoxResult
Dim nTempD  
nTempD = 0

nTempD = Val(TextBox3.Text) + Val(TextBox4.Text)

If TextBox2.Text <> nTempD Then
    nVbResult = MsgBox("数据输入有误,是否要保存?" & Chr(13) & "点击‘是’,保存数据;否则不保存。", vbYesNo + vbInformation, "错误信息")
    If nVbResult = vbNo Then
        TextBox2.SetFocus
        TextBox2.SelStart = 0
        TextBox2.SelLength = Len(TextBox2.Text)
        Exit Sub
    End If
End If
End Sub

[ 本帖最后由 tanhong 于 2008-3-14 13:58 编辑 ]
作者: chenwm1973    时间: 2008-3-14 14:15
标题: 不是变量定义问题
不是变量定义问题,实际上本来我没有使用变量,直接是val(textbox2.text) 等,就是发生如上问题,使用变量后还是。真不知是什么原因???以前没有这情况的。
作者: tanhong    时间: 2008-3-14 14:36
用我改写的代码试了一下,好象不会了
作者: chenwm1973    时间: 2008-3-15 19:03
[attach]28889[/attach]

好像仍旧不行。
作者: tanhong    时间: 2008-3-15 20:49
Private Sub CommandButton1_Click()
'先进行数据校核,保证数据基本准确
'数据1=数据2+数据3+数据4+数据6
Dim nVbResult As VbMsgBoxResult
'Dim i As Integer
'-------------------------------------------------------------
'Dim nTempD As Double
'变量不应该定义为布尔,而是字符串,这是造成出错的一个原因
Dim nTempD As String
'------------------------------------------------------------
nTempD = 0
nTempD = (Val(TextBox3.Text) + Val(TextBox4.Text) + Val(TextBox5.Text) + Val(TextBox6.Text))
'--------------------------------------------------------------
'If Val(TextBox2.Text) <> nTempD Then
'
'TextBox2文本框因为不用计算,只是进行文本比较所以不用进行转换, _
  这是造成出错的第二的原因,修这两处问题后就可以解决问题
'--------------------------------------------------------------
If TextBox2.Text <> nTempD Then
'Dim nTempD(5) As Double
'For i = 0 To 5
'    nTempD(i) = 0
'Next
'nTempD(0) = Val(TextBox2.Text)
'nTempD(1) = Val(TextBox3.Text)
'nTempD(2) = Val(TextBox4.Text)
'nTempD(3) = Val(TextBox5.Text)
'nTempD(4) = Val(TextBox6.Text)
'nTempD(5) = (nTempD(1) + nTempD(2) + nTempD(3) + nTempD(4))
'
'If nTempD(0) <> nTempD(5) Then
    nVbResult = MsgBox("数据输入有误,是否要保存?" & Chr(13) & "点击‘是’,保存数据;否则不保存。", vbYesNo + vbInformation, "错误信息")
    If nVbResult = vbNo Then
        TextBox2.SetFocus
        TextBox2.SelStart = 0
        TextBox2.SelLength = Len(TextBox2.Text)
        Exit Sub
    End If
End If
'Sheet1.Range("b1").Value = nTempD(0)
'Sheet1.Range("b2").Value = nTempD(1)
'Sheet1.Range("b3").Value = nTempD(2)
'Sheet1.Range("b4").Value = nTempD(3)
'Sheet1.Range("b5").Value = nTempD(4)
'Sheet1.Range("c2").Value = nTempD(5)
Sheet1.Range("b1").Value = Val(TextBox2.Text)
Sheet1.Range("b2").Value = Val(TextBox3.Text)
Sheet1.Range("b3").Value = Val(TextBox4.Text)
Sheet1.Range("b4").Value = Val(TextBox5.Text)
Sheet1.Range("b5").Value = Val(TextBox6.Text)
Sheet1.Range("c2").Value = nTempD
End Sub

修改后成果:
作者: chenwm1973    时间: 2008-3-15 22:16
谢谢版主的指点,原因我已经找到了。
就是数据类型设置时,数据只需单精度,而我设成了双精度。
这单精度与双精度的数据在转换时大概会造成误差,而显示却又正确。
让人一时没有考虑到这方面而无从着手。

再次谢谢版主。以后有机会再请教。





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3