我正在尝试弄清楚如何比较两个字符串(数字和多个小数),以查看哪个在数字上更大。
一个字符串是从注册表读取的版本信息与从 XML 文件中读取的字符串值进行比较。
不过,此示例可以模拟我正在尝试执行的操作。假设字符串 一个变量是我从注册表中读取的字符串变量和从 XML 中读取的字符串两个变量。
Dim One As String = "10.0.0.0"
Dim Two As String = "2.0.0.0"
If Two >= One Then MsgBox("Greater") Else MsgBox("Smaller")
以下代码无法正确比较,因为这些是字符串,并且字符串比较将 10 视为小于 2,尽管 10 实际上大于 2。
我尝试进行一些整数转换,但没有运气,小数似乎引起了问题。
有谁知道如何将其转换为数字/整数,以便我们可以以某种方式转换字符串,以便 10.0.0.0 被视为大于 2.0.0.0?
您的字符串看起来像是版本代码。 在这种情况下,您可能希望将它们视为不同的方式,而不是简单地将它们视为整数。 对于整数:
Dim str1 = "10.0.0.0"
Dim str2 = "2.0.0.0"
Dim str3 = "10.0.0.1"
Dim n1 = Convert.ToInt32(str1.Split("."c)(0))
Dim n2 = Convert.ToInt32(str2.Split("."c)(0))
拆分 "." 上的字符串后,第一个元素将转换为整数,以便n1
为 10,n2
为 2,允许您直接比较它们。
如果它们确实表示版本,例如 str1
vs str3
,您最终可能会进行多次测试来检查每个子段。
.NET 包含用于以下内容的Version
类型:
Dim v1 As New Version(str1)
Dim v2 As New Version(str3)
If v1 > v2 Then
' first ver is larger
Else
' str3 contains larger ver
End If
无需单独测试主要/次要/构建/修订部分 - Type 会为您完成所有这些工作。 顺便说一下,一旦你有一个有效的Version
变量,你可以使用ToString()
创建一个相同格式的字符串:
Console.WriteLine("The Version is: '{0}'", v2.ToString())
结果:
版本是:"10.0.0.1"