2015-10-05 53 views
3

我试图从Powershell向Nagios输出一个值。我只想要一个干净的数字。对于小数点,对于1000和1000000不是分隔符,并且总是5个小数位,即使它是尾随零也是如此。舍入无CurrencyGroupSeparator

起初,我有这样的:

$DiskStruct.AvgDiskReadQueueValue = '{0:N5}' -f ($AvgObjDiskReadQueueValues.average) 

,但是这导致: 2205.06040082681 转换中: 2,205.06040

于是我试着

$DiskStruct.AvgDiskReadQueueValue = [decimal][math]::Round($AvgObjDiskReadQueueValues.average, 5) 

但不知何故,这引起了Powershell脚本有时以科学记数法输出。它没有显示尾随零。 结果=>阅读/ s = 2205.0604

那么我能做些什么总是输出5位小数,但不显示任何currencygroupseparator?

(Get-Culture).NumberFormat.CurrencyGroupSeparator 

我需要的结果是2205.06040。

回答

2

我在第一时间发表了这个评论,但我想这个可能性并不是很明显,所以在这里得到答案可能会有用。

{0:Nx}将数字转换为可以转换回任何合适的数字类型的字符串。既然你想保留小数:

[decimal]('{0:N5}' -f ($AvgObjDiskReadQueueValues.average)) 

是你想要的。


为了使这个溶液培养独立的,你可以使用a little trick

$OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture 
[System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US" 

# Do culture-sensitive stuff here. 
# (As long as it doesn't execute in a different thread.) 
[decimal]('{0:N5}' -f ($AvgObjDiskReadQueueValues.average)) 

[System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture 
+0

抱歉,但这并不适用于我。只是fyi,问题出在这个nagios插件(https://github.com/willemdh/check_ms_win_disk_load)以防somone想测试。 使用您的解决方案时,我得到没有小数 行:驱动器C:平均2样本:{速率(读取:0MB/s)(写入:6229MB/s)} {平均Nr of(读取:0r/s) :397959w/s)} {延迟(阅读:0ms)(写:116334ms)} {队列长度(阅读:0ql)(写:499ql)} | 'Read_Latency'= 0ms 'Write_Latency'= 116334ms'Read_Queue'= 0ql'Write_Queue'= 499ql'Number_of_Reads'= 0r/s'Number_of_Writes'= 397959w/s'Read_Rate'= 0MB/s'Write_Rate'= 6229MB/s – willemdh

+1

什么不工作?我对nagios不熟悉,但'[decimal]('{0:N5}'-f 2205.06040082681)'返回'2205.06040' - 正是你想要的。如果你需要这个值是一个字符串而不是十进制,你可以进一步将它转换为'[string]'。 –

+0

它在脚本中完全删除小数。当在shell中使用时,我得到 [decimal]('{0:N5}'-f 2205.06040082681) 无法将值“2 205,06040”转换为键入“System.Decimal”。错误:“输入字符串格式不正确。” – willemdh

1

我这个 $Separator = (Get-Culture).NumberFormat.CurrencyGroupSeparator $DiskStruct.AvgDiskSecReadValue = ('{0:N5}' -f ([math]::Round(($AvgObjDiskSecReadValues.average * 1000), 5))).replace("$Separator",'')

解决它通过首先要求分离,然后什么也没有,我得到替换它我想要的是。 将它改回亚历山大的解决方案,因为它看起来更清洁。