2014-02-14 4 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 
Смежные вопросы