[VB.NET]IsNumeric()'s bug?!

前陣子因為需要用同事的Code,發現同事在判斷是否是數值的部份自己寫了一道函式。詢問了一下為何不用內建的IsNumeric?她回答道:「微軟內建的有Bug」,傳入字串都會判斷錯誤。

但…真的有Bug嗎?好奇之下稍稍看了一下。發現那並不是Bug,原來只是內建的IsNumeric比我們想的還聰明而已。

看看MSDN就可以發現一點端倪。

image

函式的說明寫的是”是否可做為數字來評估”。因此看起來,我們一般常見能經過處理變為數值的字串,呼叫IsNumeric函式,都會回傳True。

.NET內建的IsNumeric會接受”,”當作千位分隔符號、接受”+”與”-“當作正負號、接受字串中含有一個逗點當作小數點、接受”e”當作科學符號、接受括弧、與八進制和十六進制的數值字串。

測試Code如下:

    Sub Main()
Dim testStrings() As String = {“123,,”, “1,,23”, “123,”, “123,”, “123,000”, “1.23”, “+123”, “-123”, “12e3”, “2d3”, “&H0A”, “&6”, “(123)”, “¥12.3”}
Dim value As Decimal
For Each testString As String In testStrings
Console.Write(testString & “ : “)
Console.Write(IsNumeric(testString).ToString() & vbTab)
Console.WriteLine(“value : “ & If(Decimal.TryParse(testString, value), value.ToString, String.Empty))
Next
End Sub








運行結果如下:

image

Link


  • IsNumeric 函式 (Visual Basic)


  • 我认为isnumeric()函数有bug,不知大家以为如何,有例子


  • 让我意外的IsNumeric()函数