为啥 IsNumeric("1.23D45") 返回 True?

Posted

技术标签:

【中文标题】为啥 IsNumeric("1.23D45") 返回 True?【英文标题】:Why does IsNumeric("1.23D45") return True?为什么 IsNumeric("1.23D45") 返回 True? 【发布时间】:2016-04-20 04:35:23 【问题描述】:

在很长一段时间里,我认为IsNumeric("1.23E45") 返回了True,因为“E”代表科学记数法,使得 1.23E45 成为 1.23x1045

最近我注意到IsNumeric("1.23D34") 返回了True,我不知道为什么。

DE 产生相同的结果:

?val("1.23d45")
 1.23E+45 

?val("1.23e45")
 1.23E+45 

怎么会?

【问题讨论】:

【参考方案1】:

这出现在chat


根据Wikipedia...

FORTRAN 也使用“D”来表示双精度数。

“UH Mānoa 数学 » Fortran 第 3 课:格式、书写等”。 Math.hawaii.edu。 2012-02-12。检索于 2012 年 3 月 6 日。

VBA 仍然有许多 BASIC 祖先的痕迹(行号、GoSub..ReturnRem 等) - 恰好 BASIC 的根源在于... FORTRAN。

因此,科学记数法的“D”显然只不过是过去的爆炸。

底线,避免混淆维护您的代码的人,并坚持使用“E”(或“e”)。但要知道,如果您需要将一些 FORTRAN 代码移植到 ...VBA,也支持“D”(或“d”)。

【讨论】:

好故事。因此,OP 必须检查是否出现“D”字符以明确说明单元格内容是数字 确实是好故事,我从未注意到这种行为,完全无法解释

以上是关于为啥 IsNumeric("1.23D45") 返回 True?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 isnumeric isdigit 和 isdecimal False 为 1.5?

Windows 8/Windows 2012 中的 VB6“IsNumeric()”行为

如何在访问中查询“where isNumeric(col), and col > 0”

t-sql 中模仿 int.ToString("D4"); 的高效算法

从 Split() 获取第一项

JAVA温度补0问题?