VB.NET 中 IsNumeric() 的错误结果
Posted
技术标签:
【中文标题】VB.NET 中 IsNumeric() 的错误结果【英文标题】:Wrong result from IsNumeric() in VB.NET 【发布时间】:2011-07-21 00:34:25 【问题描述】:如果IsNumeric
为真,我在VB.NET 中有一个函数循环遍历值并尝试将其转换为小数,
Dim Value As String
If IsNumeric(Value) = True Then
Rate = CType(Value, Decimal) <--- bombing here
End If
我发现,当函数接收到值 603E43 IsNumeric
时,由于某种原因,它的计算结果为 True,然后在转换时发生炸弹。为什么IsNumeric
在这种情况下会是真的?
【问题讨论】:
因为603E43
是浮点值的半标准数字表示,特别是:603*10^43
。我不知道CType
是如何工作的(因为我不使用VB.NET ;-),但在C# 中我可能会使用decimal.TryParse
。 IsNumeric
可能与 SQL Server“数字”规则更相关,其中还包括前导美元符号等。我似乎找不到任何官方的“完整”规则。
轰炸是什么意思?什么是错误消息/异常?
也许看到这个VB6 SO question about IsNumeric ...我假设VB.NET的IsNumeric是一个很好的克隆;-)
@pst,啊,听起来不错。非常感谢您提供的信息。
另一方面,您不需要= True
部分。就说If IsNumeric(Value) Then ...
【参考方案1】:
见http://support.microsoft.com/kb/329488
IsNumeric 如果可以转换为 double 则返回 true,这对于 603E43 为 true 但是,该值大于小数可以容纳的值
您可以使用 Decimal.TryParse 函数作为替代方案。看 http://msdn.microsoft.com/en-us/library/9zbda557.aspx
【讨论】:
就个人而言,我在所有情况下都使用IsNumeric
转而使用<type>.TryParse
。它更加强大。
啊+1。这得到了我。我正要说:“但小数是一种更广泛的类型”,因为十进制值的 size 是双精度值的两倍(128 位对 64 位)——但 范围 i> 少得多(而 precision 高得多)。小数的 范围 是 +/- 10^28,而双精度是 +/- 10^308(给或取)。以上是关于VB.NET 中 IsNumeric() 的错误结果的主要内容,如果未能解决你的问题,请参考以下文章
错误:表插入在 vb.net 和 msacess 中返回错误