如何在Powershell中计算给定小数的小数位数?
$a = 0.0001
$b = 0.000001
将$a
强制转换为字符串并返回$a.Length
的结果为6 ...我需要4。
我以为会有一个十进制或数学函数,但我还没有找到它,弄乱字符串似乎不太优雅。
$a = 0.0001
$decimalPlaces = ($a.ToString() -split '\.')[-1].Length
基本上,将字符串拆分为.
字符,并获取数组中最后一个字符串的长度。如果您想要一种文化安全的方法来执行此操作,请选择一种替代方法:
$cultureDecimal = [System.Threading.Thread]::CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator $a = 0.0001 $decimalPlaces = ($a.ToString().Split($cultureDecimal))[-1].Length
在这种情况下,我选择了[string].Split
方法,因为我们不想担心是否先检查是否需要转义表达式(.
是正则表达式中的特殊标记,但,
不是在量词之外)。
文化不变性解决方案:
$a = 0.0001
("$a" -replace '.+\.').Length # -> 4
,该编号不必与原始输入格式匹配;因此,该格式不适用。例如,Caveat:此解决方案依赖于
[double]
编号的默认字符串表示形式
.0100
稍后进行字符串化时,将变为'0.01'
"$a"
,使用可扩展字符串
.
作为小数点。$a.ToString([cultureinfo]::InvariantCulture)
。.ToString()
(无参数)应用current
,
-而不是.
-用作小数点。 Caveat
$a
用作-replace
的LHS,则$a
被[[implicitly字符串化,在这种情况下,您-好奇-得到了文化-敏感] >行为,例如.ToString()
[-replace '.+\.
有效地从输入字符串中删除所有字符,直到小数点,包括小数点,.Length
对结果字符串中的字符进行计数-小数位数。