vb 6.0 实时错误“溢出”怎么解决?

来源:百度知道 编辑:UC知道 时间:2024/06/16 23:57:55
Private Sub Command1_Click()

Dim nIndex, size As Currency
nIndex = 33
Dim DAT(0 To 3) As Byte

Open file_path For Binary As #1 '检查索引
Do While nIndex < frame_number * 4 + 32

Get #1, nIndex, DAT
size = size + (DAT(3) * 256 ^ 3 + DAT(2) * 256 ^ 2 + DAT(1) * 256 + DAT(0)) / 2

nIndex = nIndex + 4

Loop

MsgBox (size)

Close

End Sub
-------------------------------------
这样一个程序,在size = size + (DAT(3) * 256 ^ 3 + DAT(2) * 256 ^ 2 + DAT(1) * 256 + DAT(0)) / 2这句溢出

此时nindex=1233,size=631730。什么原因?

跪谢各位大大……救急

问题出在DAT(1) * 256 ,因为你定义DAT(1)为byte型,所以VB会认为DAT(1) * 256 是byte型,因此溢出。这样改:
size = size + (DAT(3) * 256 ^ 3 + DAT(2) * 256 ^ 2 + DAT(1) * 256! + DAT(0)) / 2。(加一个!号就行。)

Currency 数据类型

Currency 变量存储为 64 位(8 个字节)整型的数值形式,然后除以 10,000 给出一个定点数,其小数点左边有 15 位数字,右边有 4 位数字。这种表示法的范围可以从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。Currency 的类型声明字符为at号 (@)。

Currency 数据类型在货币计算与定点计算中很有用,在这种场合精度特别重要。

计算错误
如果计算没有问题,就加个DoEvent

数据类型的问题吧。