为什么 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
,因为内部 符号 table 有 Foo
大写 F
.
我找不到这方面的任何信息:
我正在初始化一个变量,当我输入一个科学记数法的数字(例如 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
,因为内部 符号 table 有 Foo
大写 F
.