【问题标题】:A Function to evaluate an integer as a decimal将整数计算为小数的函数
【发布时间】:2014-02-14 09:30:24
【问题描述】:

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

【问题讨论】:

标签: vb.net .net-2.0


【解决方案1】:

真的,只需使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2015-12-07
      • 2017-03-03
      • 2021-10-10
      • 1970-01-01
      相关资源
      最近更新 更多