为什么Visual Basic编辑器将科学计数法转换为以#结尾的数字?

时间:2018-08-27 17:00:14

标签: excel vba vbe

我找不到有关此的任何信息:

我正在初始化一个变量,当我用科学记数法输入数字时,例如8.45673E11,但是它将其转换为带有结尾的复合符号的标准格式845673000000#-我想知道这是否应该发生?是否有控制此自动转换的设置?复合符号表示什么?

非常感谢! 拉娜

1 个答案:

答案 0 :(得分:5)

之所以发生这种情况,是因为当您在VBE中键入代码时,所看到的不是所得到的

当前代码行仅是纯文本:在您按Enter或离开该行之前,它不会被理解为 code 。然后,在后台发生了几件事:

  • VBE 解析当前代码行,并确定是否可以对其进行编译。
    • 如果该语句无效,则将弹出“编译错误”消息框,或将其突出显示为红色(取决于您的VBE“按需编译”设置)。
  • 有效的代码被编译为P代码指令,并与源代码一起存储在宿主文档中-尽管此时所有代码仍仅存储在内存中。
  • P代码被转换回VBA源代码,并且您刚才输入的代码行被就地重写。

因此,当您编写Foo = 8.45673E11时,VBE会确定分配的RHS是双字面量,并编译相应的P代码指令;当该指令翻译回VBA源代码时,将其“重写”为显式的双字面量845673000000##后缀是类型提示< / em>的意思是“那是Double”),因为P-Code并不关心数字(例如科学计数法)的表示,只关心数字本身;添加 type提示字符,以便该类型是已知的,并且下次编译表达式时无需再次重新评估。

当您编写Foo = 8.45673E11时,您仍然会得到Foo = 845673000000#,因为P代码并不关心那个空格。

这也是为什么给定Public Foo As Double并输入foo = 123会得到Foo = 123的原因,因为内部符号表具有Foo并带有大写F