vb 溢出的问题

DimaAsLonga=VScroll1.value*100Picture1.Top=-a为什么这段代码在数值到-32,768就提示溢出了?... Dim a As Long
a = VScroll1.value * 100
Picture1.Top = -a

为什么这段代码在数值到-32,768就提示溢出了?
展开
 我来答
城妹子☆0089
2014-06-03 · TA获得超过178个赞
知道答主
回答量:106
采纳率:0%
帮助的人:122万
展开全部
VB进行加减乘除四则运算时,会根据第一步运算时的位数来决定最终结果的存储位数。这个跟最终赋值的那个变量是什么类型是无关的,因为这是发生在运算过程中(也就是赋值之前)的。
所以
16384 * 4 * 0.5
由于16384是Integer,所以VB会先假定运算结果也是Integer,因此它就分配两个字节的内存空间来存储运算结果,然后它开始运算16384 * 4,结果为65536,超出Integer的范围了,它就立刻报“溢出”,后面的也不再计算了。16384 * 2 和 2*16384 也是同样的道理,都是因为计算结果超出Integer范围所以提示“溢出”。
4 * 0.5 * 16384
同样4也是Integer,所以VB也是预定了两个字节的“座位”恭候运算结果。但是,当运算到4 * 0.5时,由于涉及到浮点运算了,所以VB就自动把运算结果的类型调整为Double,也就是说“座位”一下子扩大为8个字节了,后面再怎么运算也不会溢出了。

要想让 16384 * 4 * 0.5 不会出现溢出的错误,可以这样:
16384& * 4 * 0.5 '把16384强制指定为Long型(4个字节),这样再计算就不会溢出了

16384 * 4.0 * 0.5 '别以为4和4.0是一样的哦,前者是整数,后者可是浮点数哦。当然VB会自动把4.0改为4#,意思就是Double
希望能解决您的问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式