在我的代码中,我必须验证十进制数,零和负数。
如果小数点分隔符是逗号,则代码可以正常工作,但如果它是一段时间,则代码无法正常工作。
如果我输入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
答案 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函数。