Преобразование строки с несколькими десятичными числами в число / число 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"

Другие вопросы по тегам