excel - 为什么 Visual Basic 编辑器将科学记数法转换为以 # 结尾的数字?
问题描述
我找不到这方面的任何信息:
我正在初始化一个变量,当我以科学记数法输入一个数字(例如 8.45673E11)时,它会将其转换为标准形式,并在末尾带有复合符号 845673000000# - 我想知道这是否应该发生?是否有控制这种自动转换的设置?复合符号表示什么?
非常感谢!羊毛
解决方案
发生这种情况是因为,当您在 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
。
推荐阅读
- java - 播放音频而不将其保存在文件中
- android - Android App 可能占据整个屏幕
- git - Heroku push:我们必须提交 runtime.txt
- python - 计算属于巨型组件的节点比例(python,networkx)
- reactjs - 我如何将数据从承诺传递到反应中的道具
- javascript - 在js中添加动态标签
- c - cs50: pset1: credit: Stuck, 所有输入的卡都无效
- python - 在 T-SQL 和 Python 之间为 Unicode 字符生成 MD5 HASH
- javascript - 删除行数据后,Kendo Grid 无法再次重新加载模板?
- ios - iCloud 无处不在的容器 url 为零