2013-07-03 115 views
-1

我有一個參數價格,它是十進制類型,它可以有一個正值,負值和零值。該值永遠不會有小數,但需要顯示小數。將正負值和零值格式化爲小數點後2位格式

雖然我解析小數,它處理0和> 0值,但不處理負值。我如何處理所有3在一個解析操作?

decimal.Parse(a.price.ToString("##.00"), NumberStyles.AllowDecimalPoint) 

我需要轉換數據以顯示在歐洲文化中,所以-3.00的值應該顯示爲-3,00。

這裏是我想,這讓我

var culture = CultureInfo.GetCultureInfo("nl-NL"); 
Price = a.GroupId == g ? decimal.Parse(a.BidPrice.ToString("##.000", culture), NumberStyles.Number) : decimal.Parse(decimal.Zero.ToString("##.000", culture), NumberStyles.Number) 

型「System.FormatException」的第一次機會異常出現在mscorlib.dll

更多信息的異常:輸入字符串的不以正確的格式。

添加一些測試數據,

3 should show up as 3,00 
-3 should show up as -3,00 
0 should show up as 0,00 

編輯 默認文化是EN-GB

+6

這似乎很奇怪..你有小數,並且你對它做了「ToStirng」,只是爲了解析它回到十進制?你想要達到什麼目的? – Botis

+0

http://stackoverflow.com/questions/2569166/converting-negative-decimal-to-string-loses-the – slavoo

+0

和生活一樣奇怪是我的朋友,我需要小數來攜帶小數,這就是我的系統傳遞數據以接受值。 –

回答

3

嘗試NumberStyles.Number,即會工作:

decimal price = -3; 
decimal result = decimal.Parse(price.ToString("##.00"), NumberStyles.Number); 
//Result: -3,00 (comma because I live in Europe :D) 

希望這有助於!

編輯:

爲了確保逗號採用德國CultureInfo的,因爲他們使用的十進制,逗號和句點作爲千個分隔符:

decimal price = -3; 
decimal result = decimal.Parse(price.ToString("##.00", CultureInfo.GetCultureInfo("de-DE")), NumberStyles.Number); 
+0

如果我真的想要逗號而不是小數點會怎麼樣?在那種情況下我將使用什麼格式? –

+0

檢查我編輯的答案。 :) – Abbas

+0

似乎不適合我。它給了我一個例外「mscorlib.dll中發生了'System.FormatException'類型的第一次機會異常」。查看我正在嘗試執行的更新問題。 –