为什么 "10+" 被认为是数字?
<p>'我在处理文字时, 发现 VBA 的 IsNumeric() 函数把 "10+" 这样的字符串</p><p>'认为是数字字符串. 如下面的程序的条件语句被设置为 "True"</p><p>Sub test()<br/>Dim str As String<br/>str = "10+" 'or "10-"<br/>If IsNumeric(str) Then<br/> MsgBox Chr(34) & str & Chr(34) & " is a numeric string"<br/>Else<br/> MsgBox Chr(34) & str & Chr(34) & " is not a numeric string"<br/>End If<br/>End Sub</p><p>'这是为什么?</p> VBS中,IsNumeric()函数的实际作用是判断参数表达式是否是数值,而这个所谓的“数值”不仅仅包含普通的数字,还包括(但可能不限于)如下情况: <p style="TEXT-INDENT: 2em;"> 科学计数法表达式,如“2e7”和“2d7”; 十六进制数,如“&H0A”; 八进制数,如“&6”; 当前区域下设置的货币金额表达式,如“¥12.44”; 加圆括号的数字,如“(34)”; 显式指定正负的数字,如“+2.1”和“-2.1”; 含有逗号的数字字符串,如“12,25”。 </p><p style="TEXT-INDENT: 2em;"> 不仅仅是VBS,JScript/JavaScript的isNaN()也存在类似问题,T-SQL中的IsNumeric()同样如此!大家可以自行研究。 </p><p style="TEXT-INDENT: 2em;"> 所以,如果你已经开始对自己以前的写过的程序有些不放心了,那么以后还是自己实现一个函数来验证表达式是否是数字比较稳妥。 </p> <p>谢谢版主。</p><p>我以前用C的时候,自己编了个程序来检查是否为数字,比较畅通。</p><p>现在用IsNumeric()函数时,出了不少错误。还以为是Bug呐。</p>
页:
[1]