2014-02-14 48 views
1

我寫了一個相當原始的共享函數來評估輸入到文本框中的數值。用戶可以輸入小數或整數,我評估的範圍是5.0到14.0。 if語句的前兩個部分返回true,但最後一個部分在輸入整數並且沒有小數點時返回false以表示小數點數。我怎樣才能修改這個函數在所有路徑上返回true?一個函數來評估整數作爲十進制

Public Shared Function CheckDecimalValue(ByVal txtbox As TextBox) As Boolean 
    Dim returnValue As Boolean = True 
    Dim txtAsDecimal As Decimal = CType(txtbox.Text, Decimal) 
    Dim decimalAsString As String = CType(txtAsDecimal, String) 
    Dim indexOfDecimalPoint As Integer = decimalAsString.IndexOf(".") 
    Dim numberOfDecimals As Integer = decimalAsString.Substring(indexOfDecimalPoint + 1).Length 

    If txtAsDecimal < 5 Then 
     returnValue = False 
    ElseIf txtAsDecimal > 14 Then 
     returnValue = False 
    ElseIf numberOfDecimals > 1 Then 
     returnValue = False 
    End If 

    Return returnValue 
End Function 
+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

爲什麼要檢查小數位數?你可能只是刪除該檢查。 – sloth

回答

3

真的,只是使用Decimal.TryParse

如果用戶使用其他.不是十進制分隔符的文化,則代碼無論如何都會中斷。

例子:

Public Shared Function CheckDecimalValue(txtbox As TextBox) As Boolean 
    Dim tmp As Decimal 
    Return Decimal.TryParse(txtbox.Text, tmp) AndAlso tmp >= 5 AndAlso tmp <= 14 
End Function 
2

強烈建議使用Decimal.TryParse代替:

如:

Public Shared Function CheckDecimalValue(ByVal txtbox As TextBox) As Boolean 

    Dim val as Decimal 

    If Not Decimal.TryParse(txtbox.Text,val) Then Return False 

    If val < 5 Or val > 14 Then Return False 

    'Space for other checks 

    Return True 

End Function 
相關問題