带逗号的双倍与带句点的双倍(无TryParse)

时间:2014-05-20 12:14:33

标签: vb.net console double console-application

在我的代码中,我必须验证十进制数,零和负数。

如果小数点分隔符是逗号,则代码可以正常工作,但如果它是一段时间,则代码无法正常工作。

如果我输入5,3输出"不正常"
但是如果我输入5.3输出"就可以了#34;

Function isInteger(x As Double) As Boolean
        Return x Mod Math.Floor(x) = 0
    End Function 

    Function isAllowed(x As String) As Boolean
         If IsNumeric(x) Then
             If x > 0 Then
                If isInteger(x) Then
                    Return True
                Else
                    Return False
                End If
            Else
                Return False
            End If
        Else
            Return False
        End If
    End Function

Sub Main()

        Dim n1 As String

        n1 = Console.ReadLine()

       if isAllowed(n1) then
          console.writeLine("is OK")
       else
          console.writeLine("is not OK")
       end if

 End Sub


End Module

2 个答案:

答案 0 :(得分:0)

请查看以下代码。它接受一个字符串作为输入并将其计算为数字(double)。希望它可以帮助你。

Public Function ExtractNumber(EenStr As String) As Double
    Dim NumberFound As Double = 0
    If Not IsNothing(EenStr) Then
        Dim Seq As Integer = EenStr.Length
        Dim _10power As Integer = 0
        Dim digits As String = "0123456789.,-"
        While Seq > 0
            If InStr(digits, EenStr(Seq - 1)) > 0 Then
                Dim substring As String = EenStr(Seq - 1)
                If substring = "." Or substring = "," Then
                    NumberFound = NumberFound / (10 ^ _10power)
                    _10power = 0
                Else
                    If substring = "-" Then
                        NumberFound = -NumberFound
                    Else
                        If NumberFound < 0 Then
                            NumberFound -= CInt(substring) * 10 ^ _10power
                        Else
                            NumberFound += CInt(substring) * 10 ^ _10power
                        End If
                    End If
                    _10power += 1
                End If
            End If
            Seq -= 1
        End While
    End If
    ExtractNumber = NumberFound
End Function

答案 1 :(得分:0)

要启用或禁用十进制验证中的某些功能,您可以对Decimal.Parse使用NumberStyles参数。在任何情况下,您都不应该同等地验证.,。它们意味着分开做事,而且它们依赖于文化。

相信我,你不想重新发明/重写Decimal.Parse的工作方式。我已经看过这段代码了,我也见过模仿Date.Parse的代码,但是在这两种情况下,作者都不太了解全球化,所以这是两页代码,只占可能输入的50%,和美国文化具体。请帮我们一个忙,并开始使用本机.NET函数。