2015-10-05 49 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",'')

解決它通過首先要求分離,然後什麼也沒有,我得到替換它我想要的是。 將它改回亞歷山大的解決方案,因爲它看起來更清潔。