Powershell:将字符串转换为数字

pcrecxhr  于 2023-01-09  发布在  Shell
关注(0)|答案(6)|浏览(502)

我有一个数组,其中捕获了来自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]不工作。我不确定regex是否正确以及如何操作。

r3i60tvu

r3i60tvu1#

简单地将字符串转换为int并不可靠。您需要将其转换为int32。为此,您可以使用.NET convert类及其ToInt32方法。该方法需要string$strNum)作为主输入,而base number10)作为要转换到的数制。这是因为您不仅可以转换到十进制(10基数),而且还可以转换为例如二进制系统(基数为2)。
给予这个方法:

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

$intNum
qyyhg6bp

qyyhg6bp2#

只需将包含数字的变量作为字符串除以1。PowerShell会自动将结果转换为整数。
$a = 15; $B = 2;$a + $B --〉152
但如果你把它分开:
a元/1 + B/1 --〉17

0qx6xfy6

0qx6xfy63#

由于本主题从未收到过经过验证的解决方案,我可以提供一个简单的解决方案,以解决您要求解决的两个问题。
1.当值为字符串时替换.""字符
string类为要更新的string对象提供了一个replace方法:
示例:

$myString = $myString.replace(".","")

1.将字符串值转换为整数
system.int32类(在powershell中简称为[int])有一个名为"TryParse"的方法,它不仅会传回一个布尔值,指示字符串是否为整数,而且如果返回true,还会通过引用将整数的值返回到现有变量中。
示例:

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

我希望这解决了你最初在问题中提出的问题。

6l7fqoea

6l7fqoea4#

我演示了如何接收一个字符串,例如“-484876800000”,并尝试解析该字符串以确保它可以被赋给一个long。我从通用时间计算日期并返回一个字符串。当你将一个字符串转换为一个数字时,你必须决定数字类型和精度,并测试字符串数据是否可以被解析,否则,它将抛出和错误。

function universalToDate
{
 param (
    $paramValue
  )
    $retVal=""

    if ($paramValue)
    {
        $epoch=[datetime]'1/1/1970'
        [long]$returnedLong = 0
        [bool]$result = [long]::TryParse($paramValue,[ref]$returnedLong)
        if ($result -eq 1)
        {
            $val=$returnedLong/1000.0
            $retVal=$epoch.AddSeconds($val).ToString("yyyy-MM-dd")
        }
    }
    else
    {
        $retVal=$null
    }
    return($retVal)
 }
tuwxkamq

tuwxkamq5#

替换字符串中除数字以外的所有字符,如下所示:

$messyString = "Get the integer from this string: -1.500 !!"
[int]$myInt = $messyString -replace '\D', ''
$myInt
# PS > 1500

正则表达式\D将匹配除数字以外的所有内容,并将它们从字符串中删除。
对于您的示例,这将非常有效。

wh6knrhe

wh6knrhe6#

问题似乎出在“-f($_.Partition.Size/1GB)}}”中,如果您想要以MB为单位的值,请将1GB更改为1 MB。

相关问题