+ -
当前位置:首页 → 问答吧 → 写vb程序十年,碰到一个最原始最简单的问题

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

时间:2011-12-07

来源:互联网

我是98年开始在学校学程序,然后工作中一起用vb做相关的开发。
现在是做工控行业。


现在遇到这种现象:

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


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

作者: comszmz   发布时间: 2011-12-07

虽然你d定义的是double类型,可是表达式10*3280两个数都是整型,
所以运算结果也认为是整型,必然会产生溢出错误
至于最终结果转换成double类型是没错,可是也要等到计算的结果出来后才能转换
现在的问题是计算过程中就出错了,你可以将其中的一个数定义成double类型

d = 10# * 3280

或者

d = 10 * 3280#

作者: sdfkfkd   发布时间: 2011-12-07

d = 10.0 * 3280

作者: ybh37   发布时间: 2011-12-07

中间临时变量溢出啦, 论坛上好像有几个相同的帖子.

作者: WallesCai   发布时间: 2011-12-07

d=32800

作者: chinayuppie   发布时间: 2011-12-07

其中一个数clng一下

作者: alifriend   发布时间: 2011-12-07

引用楼主 comszmz 的回复:

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

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

因为你的表达式中全是整数,所以vb开辟的计算空间就是整数范围内的,结果超过32767就会溢出。
你要强制转换表达式中的一个数到长整,或单精度或双精度数,就没有问题了。
例如:
d = 10! * 3280

作者: chinaboyzyq   发布时间: 2011-12-07

引用 1 楼 sdfkfkd 的回复:
虽然你d定义的是double类型,可是表达式10*3280两个数都是整型,
所以运算结果也认为是整型,必然会产生溢出错误
至于最终结果转换成double类型是没错,可是也要等到计算的结果出来后才能转换
现在的问题是计算过程中就出错了,你可以将其中的一个数定义成double类型

d = 10# * 3280

或者

d = 10 * 3280#

+1
归根接地就是运算表达式的结合方向问题,这个表达式由右向左,首先是:10*3280相乘,两个integer的类型相乘,得到一个Integer类型的数据,结果溢出了,问题就出在这个地方。

作者: Veron_04   发布时间: 2011-12-07

转换成单精度或双精度

作者: boyeasy   发布时间: 2011-12-07

热门下载

更多