[VB.NET]IsNumeric()'s bug?!
前陣子因為需要用同事的Code,發現同事在判斷是否是數值的部份自己寫了一道函式。詢問了一下為何不用內建的IsNumeric?她回答道:「微軟內建的有Bug」,傳入字串都會判斷錯誤。
但…真的有Bug嗎?好奇之下稍稍看了一下。發現那並不是Bug,原來只是內建的IsNumeric比我們想的還聰明而已。
看看MSDN就可以發現一點端倪。
函式的說明寫的是"是否可做為數字來評估"。因此看起來,我們一般常見能經過處理變為數值的字串,呼叫IsNumeric函式,都會回傳True。
.NET內建的IsNumeric會接受","當作千位分隔符號、接受"+"與"-"當作正負號、接受字串中含有一個逗點當作小數點、接受"e"當作科學符號、接受括弧、與八進制和十六進制的數值字串。
測試Code如下:
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