jkbanana 发表于 2007-1-15 13:43:00

为什么 "10+" 被认为是数字?

<p>'我在处理文字时, 发现 VBA 的 IsNumeric() 函数把 "10+" 这样的字符串</p><p>'认为是数字字符串. 如下面的程序的条件语句被设置为 "True"</p><p>Sub test()<br/>Dim str As String<br/>str = "10+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'or "10-"<br/>If IsNumeric(str) Then<br/>&nbsp;&nbsp; MsgBox Chr(34) &amp; str &amp; Chr(34) &amp; " is a numeric string"<br/>Else<br/>&nbsp;&nbsp; MsgBox Chr(34) &amp; str &amp; Chr(34) &amp; " is not a numeric string"<br/>End If<br/>End Sub</p><p>'这是为什么?</p>

wyj7485 发表于 2007-1-15 14:09:00

VBS中,IsNumeric()函数的实际作用是判断参数表达式是否是数值,而这个所谓的“数值”不仅仅包含普通的数字,还包括(但可能不限于)如下情况: <p style="TEXT-INDENT: 2em;">  科学计数法表达式,如“2e7”和“2d7”;   十六进制数,如“&amp;H0A”;   八进制数,如“&amp;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>

jkbanana 发表于 2007-1-15 14:42:00

<p>谢谢版主。</p><p>我以前用C的时候,自己编了个程序来检查是否为数字,比较畅通。</p><p>现在用IsNumeric()函数时,出了不少错误。还以为是Bug呐。</p>
页: [1]
查看完整版本: 为什么 "10+" 被认为是数字?