写vb程序十年,碰到一个最原始最简单的问题
时间:2011-12-07
来源:互联网
现在是做工控行业。
现在遇到这种现象:
Private Sub Command1_Click()
Dim d As Double
d = 10 * 3280 <<运行这里程序溢出错误
Text1.Text = d
End Sub
像上面这种程序
为什么乘出的结果大于32767会溢出,平时在运行过程中肯定会有一个超过32767的常数。
作者: comszmz 发布时间: 2011-12-07
所以运算结果也认为是整型,必然会产生溢出错误
至于最终结果转换成double类型是没错,可是也要等到计算的结果出来后才能转换
现在的问题是计算过程中就出错了,你可以将其中的一个数定义成double类型
d = 10# * 3280
或者
d = 10 * 3280#
作者: sdfkfkd 发布时间: 2011-12-07
作者: ybh37 发布时间: 2011-12-07
作者: WallesCai 发布时间: 2011-12-07
作者: chinayuppie 发布时间: 2011-12-07
作者: alifriend 发布时间: 2011-12-07
Dim d As Double
d = 10 * 3280 <<运行这里程序溢出错误
为什么乘出的结果大于32767会溢出,平时在运行过程中肯定会有一个超过32767的常数。
因为你的表达式中全是整数,所以vb开辟的计算空间就是整数范围内的,结果超过32767就会溢出。
你要强制转换表达式中的一个数到长整,或单精度或双精度数,就没有问题了。
例如:
d = 10! * 3280
作者: chinaboyzyq 发布时间: 2011-12-07
虽然你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
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28