2014-02-14 47 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 
相关问题