Подтвердить что ты не робот

Powershell: конвертировать строку в число

Хорошо, я новичок - и потерял с этим:

У меня есть массив, в котором захватываются некоторые данные из WMI:

$drivedata = $Drives | select  @{Name="Kapazität(GB)";Expression={$_.Kapazität}}

Массив имеет эти значения (2 диска):

@{Kapazität(GB)=1.500} @{Kapazität(GB)=1.500}

и просто хотите преобразовать 1.500 в число 1500

Я пробовал разные предложения, которые я нашел здесь, но не смог заставить его работать:

-Replace ".","" and [int] не работает. Я не уверен, что регулярное выражение будет правильным и как это сделать.

За большой помощью спасибо заранее.

4b9b3361

Ответ 1

Простое литье строки в качестве int не будет работать надежно. Вам нужно преобразовать его в int32. Для этого вы можете использовать класс .NET convert и его метод ToInt32. Этот метод требует string ($strNum) в качестве основного входа и base number (10) для числовой системы, к которой нужно преобразовать. Это связано с тем, что вы можете не только преобразовать в десятичную систему (базовый номер 10), но также, например, в двоичную систему (база 2).

Попробуйте этот метод:

[string]$strNum = "1.500"
[int]$intNum = [convert]::ToInt32($strNum, 10)

$intNum

Ответ 2

Просто разделите переменную, содержащую Numbers, как строку на 1. PowerShell автоматически преобразует результат в целое число.

$a = 15; $b = 2; $a + $b → 152

Но если вы разделите его раньше:

$a/1 + $b/1 → 17

Ответ 3

Поскольку эта тема никогда не получала проверенного решения, я могу предложить простое решение двух проблем, которые, как я вижу, вы задали для решения.

  • Замена "." символ, когда значение представляет собой строку

Класс string предлагает метод replace для строкового объекта, который вы хотите обновить:

Пример:

$myString = $myString.replace(".","") 
  1. Преобразование строкового значения в целое число

Класс system.int32 (или просто [int] в powershell) имеет доступный метод, называемый TryParse, который не только передает логическое значение, указывающее, является ли строка целым числом, но также возвращает значение целого числа в существующую переменную по ссылке, если она возвращает true.

Пример:

[string]$convertedInt = "1500"
[int]$returnedInt = 0
[bool]$result = [int]::TryParse($convertedInt, [ref]$returnedInt)

Надеюсь, это затронет вопрос, который вы изначально затронули в своем вопросе.

Ответ 4

Кажется, проблема в "-f ($ _. Partition.Size/1GB)}}" Если вам нужно значение в МБ, измените значение 1 ГБ на 1 МБ.