VB.NET中IsNumeric()的错误结果

Mic*_*ola 1 vb.net isnumeric

我在VB.NET中有一个函数循环遍历值并尝试将其转换为十进制,如果IsNumeric为True,

Dim Value As String

If IsNumeric(Value) = True Then
    Rate = CType(Value, Decimal)  <--- bombing here
End If
Run Code Online (Sandbox Code Playgroud)

我发现当函数接收到值603E43 IsNumeric由于某种原因求值为True然后轰炸转换.IsNumeric在这种情况下为什么会这样?

Edd*_*ddy 9

请参见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`.它更强大. (5认同)
  • 啊+1.这让我受益匪浅 我正要说:"但十进制是一个更宽的类型",因为十进制值的*size*是double的两倍(128 vs 64 bit) - 但*range*远小于*(*精度)*更高).小数的*范围*是+/- 10 ^ 28,而双倍是+/- 10 ^ 308(给或取). (2认同)