首页 > 解决方案 > 为什么 Visual Basic 编辑器将科学记数法转换为以 # 结尾的数字?

问题描述

我找不到这方面的任何信息:

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

非常感谢!羊毛

标签: excelvbavbe

解决方案


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

当前代码行只是纯文本:在您按 ENTER 或离开该行之前,它不会被理解为代码。然后,引擎盖下发生了几件事:

  • VBE解析当前代码行,并确定它是否可以编译。
    • 如果它是一个无效的语句,它会弹出一个“编译错误”消息框,或者以红色突出显示该语句(取决于您的 VBE“按需编译”设置)。
  • 有效代码被编译为 P 代码指令,并与源文件一起存储在主文档中——尽管此时它仍然只在内存中。
  • P-Code 被翻译回 VBA 源代码,并且您刚刚输入的代码行被原地重写。

所以写Foo = 8.45673E11的时候,VBE判断赋值的RHS是双字面量,编译对应的P-Code指令;当该指令被翻译回 VBA 源代码时,它被“重写”为显式双字面值845673000000##后缀是一个类型提示,意思是“那是一个Double”),因为 P-Code 不关心数字的表示(例如科学记数法),只有数字本身;添加了类型提示字符,以便类型是已知的,并且不需要在下次编译表达式时再次重新计算。

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

这也是为什么Public Foo As Double如果你输入foo = 123你会得到Foo = 123的原因,因为内部符号表Foo一个大写的F


推荐阅读