IsNumeric函数不能正常工作

8

我在经典ASP中使用IsNumeric函数时遇到了一个非常奇怪的问题。我的代码类似于:

Response.write Score                // 79.617
Response.write IsNumeric(Score)     // false
Response.write IsNumeric("79.617")  // true

有人知道为什么会发生这种情况吗?

规格说明中说函数适用于可转换为数字的字符串,从上面的例子中可以看到我得到了“true”的结果。但是,是什么导致了我的问题呢?


1
如果你执行 Response.Write TypeName(Score),你会得到什么? - Jon Egerton
1
嗯,这非常奇怪 - 我什么也没得到。所以,我想这就是函数没有起作用的原因。 - gotqn
1
请注意,Isnumeric() 可以接受您可能没有预期的值。请参见 http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html(向下滚动到 vbscript 部分)。 - David
1个回答

11
这意味着Score不仅是一个字符串,而且很可能来自于数据库。
为了保险起见,使用自己的函数:
Function My_IsNumeric(value)
    My_IsNumeric = False
    If IsNull(value) Then Exit Function
    My_IsNumeric = IsNumeric(CStr(value))
End Function

Response.write My_IsNumeric(Score)

CStr() 可以确保将除了 Null 之外的任何内容转换为字符串,并使用 IsNull() 函数处理来自数据库的 Null 值。


1
这有助于解决我的问题。你说得对,我是从数据库中获取分数的。我从数据库中获取了一个对象,但我仍然不明白为什么结果不是一个字符串... - gotqn
2
可能是一些高级类型,驱动程序无法直接理解。 - Shadow The Spring Wizard
1
@ShadowWizard - 我也遇到了同样的问题。我从数据库获取了数字500,000,isnumeric() 返回 false。数据库字段类型是 bigint - isnumeric难道不理解这个吗?另外,将其转换为字符串,然后再转回int有什么风险吗? - kneidels
1
@kneidels,您的情况似乎是由于逗号引起的:在数据库设置中,小数分隔符为逗号,而在经典ASP代码所在的服务器上,它是句点。因此,最好使用自定义函数,在其中将逗号转换为句点:value = Replace(value, ",", ".") - Shadow The Spring Wizard
1
谢谢@ShadowWizard - 我在数据库值中没有那个逗号 - 我只是在这里写成那样,以使其更清晰。 - kneidels
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接