格式化百分比小数位并删除尾随零

Dar*_*te1 2 powershell percentage number-formatting

考虑以下代码:

$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
$CultInfo.NumberFormat.PercentDecimalDigits = 2
$Obj |select @{L='pct used';E={($_.Usage/$_.LimitNew).ToString('P', $CultInfo)}}
Run Code Online (Sandbox Code Playgroud)

它返回以下输出:

pct used
--------
114.87 %
50.00 % 
81.00 % 
91.00 % 
Run Code Online (Sandbox Code Playgroud)

我真正想要的是以下输出:

pct used
--------
114.87 %
50 % 
81 % 
91 % 
Run Code Online (Sandbox Code Playgroud)

在阅读文档时,我似乎找不到在其末尾省略尾随零的选项。该方法$CultInfo.NumberFormat.PercentDecimalDigits指定要查看小数点分隔符后的位数,而不是忽略零的位数。

Jos*_*efZ 5

还要阅读自定义数字格式字符串

“%”自定义说明符

%格式字符串中的百分号()导致数字在格式化之前乘以100。将本地化的百分比符号插入到数字中格式字符串中出现百分比的位置的数字中。使用的百分比字符由当前NumberFormatInfo对象的PercentSymbol属性定义。

以下代码片段可以解决问题:

$Obj | Select-Object @{
    L='pct used';
    E={($_.Usage/$_.LimitNew).ToString('#0.## %', $CultInfo)}
    }
Run Code Online (Sandbox Code Playgroud)

结果

pct used
--------
114.87 %
50 %    
81 %    
91 %    
Run Code Online (Sandbox Code Playgroud)