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

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

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

 

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

 

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

image

 

函式的說明寫的是"是否可做為數字來評估"。因此看起來,我們一般常見能經過處理變為數值的字串,呼叫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

 

運行結果如下:
image  

 

Link