HOWTO · PowerShell
Como Arredondar Números no PowerShell
Este artigo discutirá como podemos arredondar números no PowerShell usando várias funções da classe Math do .NET framework.
Nesta página
PowerShell oferece várias maneiras de alterar a precisão de um número, e a escolha certa depende do resultado desejado. Use [Math]::Truncate para remover a parte fracionária em direção a zero, [Math]::Floor ou [Math]::Ceiling para arredondar em uma direção específica e [Math]::Round para arredondar ao valor mais próximo. Para arredondar a um número escolhido de casas decimais ou controlar empates no ponto médio, use a sobrecarga apropriada de [Math]::Round.
Escolha o comportamento de arredondamento adequado à sua tarefa
Essas operações têm finalidades diferentes. A truncagem remove a parte fracionária e se aproxima de zero. Floor se aproxima do infinito negativo, enquanto ceiling se aproxima do infinito positivo. O arredondamento para o valor mais próximo usa [Math]::Round; por padrão, a regra para empates no ponto médio é arredondar para o par. Escolha a operação antes de formatar ou exibir um valor, pois a formatação muda a maneira como um número é mostrado, mas não altera seu valor numérico subjacente.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
$value = 12.34
[Math]::Round($value, 1)
12.3
Trunque em direção a zero com [Math]::Truncate
[Math]::Truncate descarta a parte fracionária e se aproxima de zero. Para uma entrada positiva, isso se parece com arredondar para baixo; para uma entrada negativa, o resultado se move para cima na reta numérica. Por exemplo, truncar -4.8 resulta em -4, enquanto aplicar floor resulta em -5. Use a truncagem quando quiser remover os dígitos fracionários sem se aproximar sempre do infinito negativo.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
$positive = [Math]::Truncate(4.8)
$negative = [Math]::Truncate(-4.8)
"$positive, $negative"
4, -4
Arredonde para baixo com [Math]::Floor e para cima com [Math]::Ceiling
[Math]::Floor retorna o maior número inteiro menor ou igual à entrada, aproximando-se do infinito negativo. [Math]::Ceiling retorna o menor número inteiro maior ou igual à entrada, aproximando-se do infinito positivo. A direção é definida pela reta numérica, não pelo valor absoluto: para um número negativo, floor pode produzir um resultado mais negativo, enquanto ceiling pode produzir um resultado menos negativo.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
$value = -4.2
$down = [Math]::Floor($value)
$up = [Math]::Ceiling($value)
"$down, $up"
-5, -4
Arredonde para um número inteiro com [Math]::Round
[Math]::Round(value) retorna o número inteiro mais próximo. Quando o valor está exatamente entre dois inteiros, o comportamento padrão de MidpointRounding é arredondar para o par: o resultado é o inteiro par mais próximo. Isso evita um viés sistemático para cima quando vários valores de ponto médio são arredondados repetidamente. Por isso, os empates 62.5 e 63.5 vão para inteiros diferentes. Essa regra não equivale a sempre arredondar uma metade para cima.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
$firstTie = [Math]::Round(62.5)
$secondTie = [Math]::Round(63.5)
"$firstTie, $secondTie"
62, 64
Arredonde para um número escolhido de casas decimais
Use [Math]::Round(value, digits) para arredondar a uma quantidade especificada de casas decimais. O argumento digits indica essa quantidade: 0 solicita um número inteiro, 1 solicita uma casa decimal e 2 solicita duas. O resultado continua sendo um valor numérico, não uma cadeia de exibição com largura fixa; por isso, zeros à direita podem não aparecer. Para preços ou outros valores com escala fixa, formate o resultado separadamente ao exibi-lo e use um tipo numérico e uma política de arredondamento adequados nos cálculos.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
$value = 63.827439
$whole = [Math]::Round($value, 0)
$onePlace = [Math]::Round($value, 1)
$twoPlaces = [Math]::Round($value, 2)
"$whole; $onePlace; $twoPlaces"
64; 63.8; 63.83
Escolha explicitamente o comportamento nos empates de ponto médio
Quando a regra padrão de arredondar para o par não for a política desejada, passe um valor de MidpointRounding para [Math]::Round. MidpointRounding.AwayFromZero afasta do zero um valor exatamente no ponto médio: empates positivos aumentam e empates negativos diminuem. Se os requisitos pedirem arredondamento de metades para longe de zero, selecione essa regra explicitamente. O .NET oferece outras regras para empates no ponto médio; confira a política necessária em vez de presumir que “arredondar” sempre significa usar uma única regra de desempate.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
$positiveTie = [Math]::Round(2.5, [MidpointRounding]::AwayFromZero)
$negativeTie = [Math]::Round(-2.5, [MidpointRounding]::AwayFromZero)
"$positiveTie, $negativeTie"
3, -3