求助:很简单的关于long型VB溢出的问题。。。

不好意思,分用完了。。还请大家帮帮忙啊。。求助:代码如下:PrivateSubCommand1_Click()DimeAsLonge=4000*10Text1.Text=... 不好意思,分用完了。。还请大家帮帮忙啊。。
求助:代码如下:

Private Sub Command1_Click()
Dim e As Long
e =4000 * 10
Text1.Text = e
End Sub

运行显示“实时错误6,溢出”
但是直接e=40000就通过。
为什么呢?
展开
 我来答
网海1书生
科技发烧友

推荐于2018-04-14 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
是这样的:VB在进行四则运算前,会先根据参与运算的各个数值的类型来预先决定用什么类型的数值来保存运算结果(注意这跟运算结果赋值给什么类型的变量是没有关系的,因为上述过程发生在赋值前),而4000和10都是整型数(Integer),所以VB就自作聪明地按整型运算的方式来处理运算结果,但是实际运算结果40000已经大于32767(Integer允许的最大值),所以就很悲催地出现“溢出”的错误了。
你试试下面两个语句就什么都清楚了:
e = 32767 * 10 '出错,因为32767是Integer型,但运算结果却是Long型
e = 32768 * 10 '不出错,因为32768是Long型,而运算结果也是Long型

说不上这是VB的Bug,因为其实VB是故意这么做的!原因也很简单,这样做可以节省内存资源以及提高运算速度,这在进行大量的小数据运算(运算结果小于32768的整数运算)时是有非常明显的效果的。
要想避免这种错误,你可以强制设定参与运算的某个数为Long型即可(只需一个数即可),比如:
e = 4000& * 10
e = 4000 * 10&
e = CLng(4000) * 10

好了,讲课完毕,下面布置家庭作业,在不上机测试的情况下说出下面四条语句那条会出错:
e = 32767 + 10
e = 32767 - 10
e = 32767 * 10
e = 32767 / 10
百度网友95cc616
2013-09-19 · TA获得超过251个赞
知道小有建树答主
回答量:448
采纳率:100%
帮助的人:273万
展开全部
e=4000*10中,VB默认4000和10认为是二个整数,40000超过了整数的值域,所以报溢出
直接赋值e=40000则是让VB默认40000为长整数,所以没有问题
你可以修改e=4000& *10& 进行隐式声明,告诉VB这是二个长整数就不会报溢出错误啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
设计营地
2013-09-18 · 分享交流设计软件相关的知识
设计营地
采纳数:552 获赞数:860

向TA提问 私信TA
展开全部
估计是VB的一个bug,在赋值的时候,尽量不要用4000~到10000左右的值乘以10来赋值,会报溢出的错误。直接赋值一个亿都正常。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哈国君1b
2013-09-18 · TA获得超过104个赞
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:159万
展开全部
初步判断,这是VB的一个BUG。
经测试
4000*10会报错,但40000*10就能正确计算。
使用 CLng(4000) * 10,进行强制转换,可以解决。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
圣者炎雷
2013-09-19 · TA获得超过386个赞
知道答主
回答量:340
采纳率:100%
帮助的人:33万
展开全部
发短信更多的方法方法发发发发发发发发发发发发发
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式