首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBE即时窗口如何处理文字数字?

VBE即时窗口如何处理文字数字?
EN

Stack Overflow用户
提问于 2015-04-10 15:46:54
回答 2查看 97关注 0票数 4

使用“立即”窗口进行一些调试,我发现了以下内容,并为此问题进行了简化:

运行此命令:

代码语言:javascript
复制
?20000*2

产生“溢出”错误。让我们假设这是因为我们没有声明数据类型,而VBE假设了Integer --结果不属于有符号整数的边界,因此会发生溢出。

然而,如果我跑:

代码语言:javascript
复制
?39999+1

我得到了预期的40000

这是因为我最初使用的是Long而不是Integer (即20,000 vs 39,999)?因此,内存是根据初始输入数据而不是计算结果分配的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-17 18:15:33

是这样的。VBA将占用最大的输入组件,并为结果分配内存。因为第一个例子中的两个组件都是Int,所以这就是您所得到的全部。

可以使用类型声明字符强制VBE将数字视为特定的数据类型。

代码语言:javascript
复制
?20000&*2
 40000 
?20000*2&
 40000 

在这两个示例中,&(长类型声明字符)强制将内存分配给Long。它是第一个组件还是后一个组件并不重要。我认为有些操作会被强制转换成特定的数据类型。指数就是其中之一。

代码语言:javascript
复制
?2^2^2^2^2^2
 4294967296 
?typename(2^2^2^2^2^2)
Double

即使所有的组件都是整数,结果也是双倍的--即使它不一定是

代码语言:javascript
复制
?typename(2^2)
Double
票数 6
EN

Stack Overflow用户

发布于 2016-12-22 22:30:55

这种隐式类型并不局限于直接窗口。代码中也可能出现相同的溢出:

代码语言:javascript
复制
Sub foo()

  Dim x As Long

  x = 20000 * 2 'Overflow error

End Sub

此外,当String隐式转换为数字类型时,它被转换为Double

代码语言:javascript
复制
?TypeName("123" + 6)
Double
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29565624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档