我有几个字符串,并尝试删除它们的前导零。我知道我可以使用TrimStart()
,但如果所有数字都为零则错了。
$Test = "00000.22"
$Test = $Test.trimstart('0')
结果是.22,我期望的是0.22。我怎样才能实现它?谢谢。
您可以使用类型转换为十进制
$Test = "00000.22"
[decimal]$Test
一个纯粹的文本解决方案是使用带有正则表达式的-replace
运算符:
PS> "00000.22" -replace '^0+', '0'
0.22
^0+
在字符串的开头(+
)匹配一个或多个(^
)零,并用一个零替换它们。
gms0ulman's answer很方便,在大多数情况下可能工作正常,但有一些陷阱:
[decimal]
,并将其转换回字符串可以生成特定于文化的表示形式,其中.
转换为,
(也就是说,PowerShell本身通常应用不变文化,它总是使用.
);例如。:
# Cast to [decimal] using the German culture ('de')
PS> [System.Threading.Thread]::CurrentThread.CurrentCulture = 'de'; [decimal] '0000.22'
0,22 # !! Note the "," instead of "."
[decimal]
等高精度数据类型,也可能出现舍入误差:
PS> [decimal] '00.99999999999999999999999999999'
1.0000000000000000000000000000 # !! rounding occurred