为什么 Visual Basic 编辑器将科学记数法转换为末尾带有 # 的数字?

Why does Visual Basic Editor convert scientific notation to a number with # at the end?

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

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

非常感谢! 拉娜

这是因为,当您在 VBE 中键入代码时,所见即所得

当前代码行只是纯文本:它不会被理解为 code,直到您按下 ENTER 键或离开该行。然后,幕后发生了几件事:

  • VBE 解析当前代码行,判断是否可以编译。
    • 如果它是一个无效的语句,它会弹出一个 "compile error" 消息框,或者以红色突出显示该语句(取决于您的 VBE "compile on demand" 设置)。
  • 有效代码被编译为 P 代码指令,并与源代码一起存储在主机文档中 - 虽然此时它仍然只在内存中。
  • P 代码被翻译回 VBA 源代码,您刚刚输入的代码行被就地重写。

所以当你写Foo = 8.45673E11的时候,VBE判断赋值的RHS是一个double literal,并编译相应的P-Code指令;当该指令被翻译回 VBA 源代码时,它是 "re-written" 作为显式 双文字 845673000000## 后缀type hint meaning "that's a Double") 因为 P-Code 不关心数字的 representation(例如科学记数法),只有数字本身;添加了 type hint 字符,这样类型就已知了,下次编译表达式时不需要重新计算。

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

这也是为什么给定 Public Foo As Double 如果你输入 foo = 123 你会得到 Foo = 123,因为内部 符号 tableFoo 大写 F.