意外发现VB6.0一个诡异的错误,谁能找到其中原因?

xatjzgb 2019-06-17 10:25:52
我在调试一个小的数据采集工程任务中,突然遇到溢出错误警告,实时错误“6”,溢出,百思不得其解,那位资深VB6.0玩家来帮忙找原因吧!



原码:
Private Sub Form_Load()

Dim x As Double

x = (255 - 17) * 65536 / 256
x = (255 - 17) * 256

End Sub

运行就出错,那个“17”原本是采集来的数据,出错时得到其值,就索性改成现在这个代码了,只要小于127,均是这个溢出错误,换成128,就OK了,原因何在?
...全文
204 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xatjzgb 2019-06-22
  • 打赏
  • 举报
回复
引用 4 楼 脆皮大雪糕 的回复:
请再仔细看一遍我在2楼的回复,已经说明了原因了。 你把y定义成integer试试 Dim y As Integer
不用试了,肯定“溢出”
eisldkw 2019-06-21
  • 打赏
  • 举报
回复
两位大师,都回答完了,
脆皮大雪糕 2019-06-18
  • 打赏
  • 举报
回复
因为你的255、17都被当做int进行处理了,一开始分配的内存就2个字节,乘以65536的时候就超出了int的上限。 可以用类型说明符来对常量进行声明,让一开始就分配double类型的内存空间用于计算 integer % long & single ! double #

Dim x As Double
x = (255# - 17) * 65536 / 256
x = (255# - 17) * 256
End Sub
还有就是在计算过程中强制做类型转换

Private Sub Form_Load()

    Dim x As Double
    
    x = CDbl(255 - 17) * 65536 / 256
    x = CDbl(255 - 17) * 256

End Sub


脆皮大雪糕 2019-06-18
  • 打赏
  • 举报
回复
请再仔细看一遍我在2楼的回复,已经说明了原因了。 你把y定义成integer试试 Dim y As Integer
milaoshu1020 2019-06-18
  • 打赏
  • 举报
回复
试试这样:

Private Sub Form_Load()

Dim x As Double

x = (255.0 - 17) * 65536 / 256
x = (255.0 - 17) * 256

End Sub
xatjzgb 2019-06-18
  • 打赏
  • 举报
回复
感谢楼上两位老师指点,出现溢出错误的是 x = (255 - 17) * 256 条运算式,在255后面加上#确实管用 但就是不明白为什么直接用常数就要出错,要用变量带入就没问题了,这是为什么? 看代码:

Private Sub Form_Load()

Dim x As Single
Dim y As Single

y = 255
x = (y - 17) * 256

End

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧