好的,我是初学者 - 并且因此失败了:
我有一个数组,其中捕获了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]
无效。
我不确定正则表达式是否正确以及如何做到这一点。
为了帮助,请提前多多谢谢。
答案 0 :(得分:50)
简单地将字符串转换为int
将无法可靠地运行。您需要将其转换为int32
。为此,您可以使用.NET convert
类及其ToInt32
方法。该方法需要string
($strNum
)作为主要输入,base number
(10
)要转换为数字系统。这是因为您不仅可以转换为十进制系统(10
基数),还可以转换为二进制系统(基数2)。
尝试使用此方法:
[string]$strNum = "1.500"
[int]$intNum = [convert]::ToInt32($strNum, 10)
$intNum
答案 1 :(得分:19)
只需将包含Number的数字作为字符串除以1. PowerShell会自动将结果转换为整数。
$ a = 15; $ b = 2; $ a + $ b - > 152
但如果你之前分开它:
$ a / 1 + $ b / 1 - > 17
答案 2 :(得分:7)
由于此主题从未收到经过验证的解决方案,因此我可以为我看到您提出解决方案的两个问题提供一个简单的解决方案。
字符串类为要更新的字符串对象提供替换方法:
示例:
$myString = $myString.replace(".","")
system.int32类(或者仅仅是powershell中的[int])有一个名为" TryParse"它不仅会传回一个布尔值来指示字符串是否为整数,而且如果它返回true,也会通过引用将整数的值返回到现有变量中。
示例:
[string]$convertedInt = "1500"
[int]$returnedInt = 0
[bool]$result = [int]::TryParse($convertedInt, [ref]$returnedInt)
我希望这能解决您最初在问题中提出的问题。
答案 3 :(得分:0)
我演示了如何接收一个字符串,例如“-484876800000”并尝试解析该字符串以确保它可以分配给一个长整数。我从通用时间计算日期并返回一个字符串。将字符串转换为数字时,必须确定数字类型和精度,并测试字符串数据是否可以解析,否则会抛出错误。
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)
}
答案 4 :(得分:0)
像这样替换字符串中除数字之外的所有数字:
$messyString = "Get the integer from this string: -1.500 !!"
[int]$myInt = $messyString -replace '\D', ''
$myInt
# PS > 1500
正则表达式 \D
将匹配除数字以外的所有内容并将其从字符串中删除。
这适用于您的示例。
答案 5 :(得分:-1)
似乎问题出现在" -f($ _.Partition.Size / 1GB)}}"如果您想要以MB为单位的值,则将1GB更改为1MB。