写vb程序十年,碰到一个最原始最简单的问题

茂一茂 2011-12-07 09:18:52
我是98年开始在学校学程序,然后工作中一起用vb做相关的开发。
现在是做工控行业。


现在遇到这种现象:

Private Sub Command1_Click()
Dim d As Double
d = 10 * 3280 <<运行这里程序溢出错误
Text1.Text = d
End Sub


像上面这种程序
为什么乘出的结果大于32767会溢出,平时在运行过程中肯定会有一个超过32767的常数。

...全文
142 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
茂一茂 2011-12-08
  • 打赏
  • 举报
回复
非常感谢各位,看来基础不扎实,闹笑话了,嘿嘿
嗷嗷叫的老马 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 comszmz 的回复:]
非常感谢各位,看来基础不扎实,闹笑话了,嘿嘿
[/Quote]
这个很正常

咱们大家都用手机,也会遇到手机出问题,比如死机重启什么的,但是把手机为什么出现这些问题的原因都搞清楚的人却不是多数吧

做应用的话,能按需求解决问题即可,完成目标是第一,这与编程爱好者是不同的.
嗷嗷叫的老马 2011-12-08
  • 打赏
  • 举报
回复
这就是做应用的人与将编程作为爱好的人的区别

此问题就是VB默认数据类型造成的:)
boyeasy 2011-12-07
  • 打赏
  • 举报
回复
转换成单精度或双精度
贝隆 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sdfkfkd 的回复:]
虽然你d定义的是double类型,可是表达式10*3280两个数都是整型,
所以运算结果也认为是整型,必然会产生溢出错误
至于最终结果转换成double类型是没错,可是也要等到计算的结果出来后才能转换
现在的问题是计算过程中就出错了,你可以将其中的一个数定义成double类型

d = 10# * 3280

或者

d = 10 * 3280#
[/Quote]
+1
归根接地就是运算表达式的结合方向问题,这个表达式由右向左,首先是:10*3280相乘,两个integer的类型相乘,得到一个Integer类型的数据,结果溢出了,问题就出在这个地方。
chinaboyzyq 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 comszmz 的回复:]

Dim d As Double
d = 10 * 3280 <<运行这里程序溢出错误

为什么乘出的结果大于32767会溢出,平时在运行过程中肯定会有一个超过32767的常数。
[/Quote]
因为你的表达式中全是整数,所以vb开辟的计算空间就是整数范围内的,结果超过32767就会溢出。
你要强制转换表达式中的一个数到长整,或单精度或双精度数,就没有问题了。
例如:
d = 10! * 3280
波导终结者 2011-12-07
  • 打赏
  • 举报
回复
其中一个数clng一下
booksoon 2011-12-07
  • 打赏
  • 举报
回复
d=32800
熊孩子开学喽 2011-12-07
  • 打赏
  • 举报
回复
中间临时变量溢出啦, 论坛上好像有几个相同的帖子.
咸清 2011-12-07
  • 打赏
  • 举报
回复
d = 10.0 * 3280
特别 2011-12-07
  • 打赏
  • 举报
回复
虽然你d定义的是double类型,可是表达式10*3280两个数都是整型,
所以运算结果也认为是整型,必然会产生溢出错误
至于最终结果转换成double类型是没错,可是也要等到计算的结果出来后才能转换
现在的问题是计算过程中就出错了,你可以将其中的一个数定义成double类型

d = 10# * 3280

或者

d = 10 * 3280#
supertankhzt 2011-12-07
  • 打赏
  • 举报
回复
十年了才发现这点小问题呀?
MSDN中这样说:
试图在计算中使用一个数字,并且该数字被强制为一个整数,但是结果超过了整数的范围,例如:
Dim x As Long
x = 2000 * 365 ' 错误: 溢出
要解决这个问题,请按如下方式键入该数字:
Dim x As Long
x = CLng(2000) * 365
不过我还是觉得
d = 10# * 3280
这样好一点,直接声明为双精度类型再运算,而不是integer再转换再计算。
多难成佛 2011-12-07
  • 打赏
  • 举报
回复
勋章多的那几个说的都不错,放脑子里存下了

7,763

社区成员

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

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