是否有一个cmdlet可以对输出中的数字(所有浮点值)进行舍入?
当我运行以下命令时:
get-vm |select ProvisionedSpaceGB,UsedSpaceGB
Run Code Online (Sandbox Code Playgroud)
我把这个输出作为一个表:
ProvisionedSpaceGB UsedSpaceGB
------------------ -----------
1224,0003194380551576614379883 349,88938544876873493194580078
1224,0003062393516302108764648 321,74483488313853740692138672
502,80292716529220342636108399 74,052481059916317462921142578
700,00035238638520240783691406 484,56624550372362136840820312
800,0003144945949316024780273 322,26342210918664932250976562
Run Code Online (Sandbox Code Playgroud)
我知道我可以在selectcmdlet中定义它,如下所示:
get-vm | select @{ n="ProvisionedSpaceGB"; e={[math]::round( $_.ProvisionedSpaceGB, 2 )}},
@{ n="UsedSpaceGB"; e={[math]::round( $_.UsedSpaceGB, 2 )}}
Run Code Online (Sandbox Code Playgroud)
然后得到这个输出:
ProvisionedSpaceGB UsedSpaceGB
------------------ -----------
1224,00 349,58
1224,00 320,32
502,80 74,05
700,00 484,57
800,00 322,26
Run Code Online (Sandbox Code Playgroud)
但必须有一个更简单的方法,比如将它管道到另一个cmdlet:
get-vm |select ProvisionedSpaceGB,UsedSpaceGB |RoundNumbers -Precision 2
Run Code Online (Sandbox Code Playgroud)
获得第二个输出.
我怀疑有一个内置的 PowerShell cmdlet,但是 - 您可以编写自己的过滤器:
filter Round-FloatValues
{
Param(
[parameter(ValueFromPipeline=$true)]
$objects,
[int]$Precision = 2
)
$objects.PsObject.Properties | ForEach-Object {
if ($_.TypeNameOfValue -eq 'System.Double')
{
[math]::round( $_.Value, $Precision )
}
else
{
$_.Value
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
get-vm |select ProvisionedSpaceGB,UsedSpaceGB |Round-FloatValues -Precision 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |