Преобразование строки с несколькими десятичными числами в число / число VB.NET
Я пытаюсь выяснить, как сравнить две строки (числа и несколько десятичных знаков), чтобы увидеть, какая из них численно больше.
Одна строка - это информация о версии, считанная из реестра, сравниваемая со значением строки, прочитанным из файла 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?
1 ответ
Ваши строки выглядят как коды версий. В этом случае вы можете рассматривать их иначе, чем просто как целые числа. Для целых чисел:
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
против 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
Нет необходимости тестировать детали Major/Minor/Build/Revision по отдельности - Type сделает все за вас. Кстати, когда у вас есть действительный Version
переменная, вы можете создать строку в том же формате, используя ToString()
:
Console.WriteLine("The Version is: '{0}'", v2.ToString())
Результат:
Версия: "10.0.0.1"