Отформатируйте процентные десятичные разряды и удалите завершающие нули - PullRequest
0 голосов
/ 26 апреля 2018

Рассмотрим следующий код:

$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)}}

Возвращает следующий вывод:

pct used
--------
114.87 %
50.00 % 
81.00 % 
91.00 % 

Что мне действительно нужно, так это следующий вывод:

pct used
--------
114.87 %
50 % 
81 % 
91 % 

При чтении документации мне кажется, что я не могу найти возможность пропустить конечные нули, когда они там есть.Метод $CultInfo.NumberFormat.PercentDecimalDigits определяет количество цифр после десятичного разделителя, но не указывает, как пропустить нули.

1 Ответ

0 голосов
/ 26 апреля 2018

Чтение Пользовательские строки числового формата , а также:

Пользовательский спецификатор "%"

Знак процента (%) в строке формата приводит к тому, что число умножить на 100, прежде чем отформатировать. Локализованный символ процента вставляется в число в том месте, где% появляется в строка формата. Используемый символ процента определяется Свойство PercentSymbol текущего объекта NumberFormatInfo.

Следующий фрагмент кода должен помочь:

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

Результат

pct used
--------
114.87 %
50 %    
81 %    
91 %    
...