我编写了一个相当原始的共享函数来评估输入到文本框中的数值。用户可以输入小数或整数,我正在评估的范围是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 :(得分: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
答案 1 :(得分: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