PowerShell中设置百分比小数位数并去除尾随零的代码实现咨询
解决PowerShell百分比格式化:设置小数位数并去除尾随零
我来帮你完善这个PowerShell代码,实现格式化百分比并去除尾随零的需求。这里有两种可行的方案,你可以根据实际场景选择:
方案1:自定义文化信息+正则替换(适合需统一文化格式的场景)
这个方案保留了你原本使用CultureInfo的思路,通过正则表达式移除尾随零和多余的小数点,确保百分比显示最多两位小数且没有不必要的零:
$Obj = @( [PSCustomObject]@{ LimitNew = 5368709120; Usage = 6166915072 } [PSCustomObject]@{ LimitNew = 10737418240; Usage = 5368709120 } [PSCustomObject]@{ LimitNew = 107374182400; Usage = 86973087744 } [PSCustomObject]@{ LimitNew = 107374182400; Usage = 97710505984 } ) # 创建自定义文化信息,避免修改系统默认设置 $CultInfo = New-Object System.Globalization.CultureInfo -ArgumentList 'en-us',$false # 设置百分比最多显示2位小数 $CultInfo.NumberFormat.PercentDecimalDigits = 2 $Obj | Select-Object @{ Label = 'pct used' Expression = { $percentValue = $_.Usage / $_.LimitNew # 先格式化为带两位小数的百分比 $formattedPct = $percentValue.ToString('P', $CultInfo) # 正则移除尾随零和多余的小数点 $formattedPct -replace '\.0+(?=%)', '' -replace '(?<=\d)\.(?=%)', '' } }
代码说明:
- 自定义
CultureInfo是为了避免影响系统默认的数字格式设置,同时指定百分比的最大小数位数为2。 - 两个正则表达式的作用:
\.0+(?=%):匹配小数点后连续的零(且后面紧跟%),将其替换为空,比如把50.00%变成50%。(?<=\d)\.(?=%):匹配前面是数字、后面是%的孤立小数点(比如50.50%处理后变成50.5%,避免出现50.%的情况)。
方案2:自定义格式字符串(简洁高效,优先推荐)
如果你不需要特定的文化格式调整,直接使用自定义格式字符串0.##%就能一步到位,自动去除尾随零并最多显示两位小数:
$Obj = @( [PSCustomObject]@{ LimitNew = 5368709120; Usage = 6166915072 } [PSCustomObject]@{ LimitNew = 10737418240; Usage = 5368709120 } [PSCustomObject]@{ LimitNew = 107374182400; Usage = 86973087744 } [PSCustomObject]@{ LimitNew = 107374182400; Usage = 97710505984 } ) $Obj | Select-Object @{ Label = 'pct used' Expression = { ($_.Usage / $_.LimitNew).ToString('0.##%') } }
代码说明:
- 格式字符串
0.##%的含义:0:强制显示整数部分(即使是0也会显示)。##:可选的小数部分,最多显示两位,没有非零小数时自动省略,同时去除尾随零。%:自动将数值乘以100并添加百分号,无需手动计算*100。
运行以上任意方案,你都会得到如下格式的输出(没有尾随零,最多两位小数):
pct used -------- 114.87% 50% 81% 90.99%
内容的提问来源于stack exchange,提问作者DarkLite1
相关产品推荐
相关产品推荐

