2010-03-19 119 views
2

我需要一個字符串轉換成的{###}。###。###貨幣格式,##C#字符串格式問題爲錢

的5461497702600值

將成爲

54.614.977.026,00

數量變得過大。

我使用

return string.Format("{0:#" + (val < 1000 ? "" : "\\.") + "##0.00}", val); 

它返回的例子

54614977.026,00

(只有一個點)

任何幫助,將不勝感激

+1

出於好奇,是'5461497702600m.ToString(「C」,someculture)'這裏someculture是一種文化,有你想要的東西(德例如-DE),或者更確切地說是一個貨幣符號設置爲空字符串的自定義文化,不夠?如果其他人可以這樣做,我絕不會手動執行此類操作:) – OregonGhost 2010-03-19 09:57:26

+1

請參考以下許多答案,不要忘記您可以避免硬編碼分隔符(例如,不要認爲Decimal分隔符是在所有文化中都是一個時代符號)。請參閱http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.currencydecimalseparator.aspx。完整列表:CurrencyDecimalSeparator,NumberDecimalSeparator,CurrencyGroupSeparator和NumberGroupSeparator。 – rohancragg 2010-03-19 10:24:36

+0

+1 @ OregonGhost/@ rohan cragg。我也很感謝所有的答案。承認我正在重新發明輪子。作爲解釋,原始規範(客戶錯誤翻譯)只請求一個。和那個,這就是我如何解決問題的方法。現場即將上線,當然,我們瞭解真相:)乾杯 – Kamal 2010-03-19 11:23:53

回答

4

比你似乎認爲,只要使用更簡單:

decimal number = 5461497702600M; 
    string s = string.Format("{0:#,##0.00}", number); 

它使用decimal是必不可少的這裏。 #,## 0.00圖片是這樣做的一種非常標準的方式,輸出將使用系統默認符號,並且fromatter足夠智能以根據需要重複3位數分組。使用以下過載到指定文化,這個例子與InvariantCulture的總是會使用小數點:

string s = string.Format(System.Globalization.CultureInfo.InvariantCulture, 
     "{0:#,##0.00}", number); 
+0

那......太棒了。謝謝。出於好奇,當你說使用小數時必不可少,爲什麼?以及如果我嘗試使用雙擊會發生什麼?這是我可能擁有的兩種類型,儘管我認爲我在整個使用十進制。 – Kamal 2010-03-19 09:51:04

+0

@Kamal,如果你使用double,你會在最後一個數字中看到舍入錯誤(比使用小數快得多)。爲了錢,使用十進制。注意'M'後綴。 – 2010-03-19 09:53:37

+1

一個小挑逗:這將把數字格式設置爲'5.461.497.702.600,00',而問題指定它應該是'54.614.977.026,00'。在應用格式之前,請將數字除以100。 – LukeH 2010-03-19 09:58:05

0

我想你想要做什麼取決於當前的文化/區域設置你的機器的ngs。在你的情況,您要使用逗號作爲小數和小數逗號,千的分隔

+0

是的,同意了。然而,我們正在使用一種文化背景,這種背景不適合該國的貨幣形式。所以我需要以編程方式進行。 – Kamal 2010-03-19 09:34:24

1

您可以使用,需要一個format stringIFormatProviderToString overload

就用N2作爲格式字符串和使用CultureInfo - 例如,de-DE - 有.作爲組分隔符和,作爲小數點符號:

return (val/100).ToString("N2", new CultureInfo("de-DE")); 

當心,如果val是一個整數類型而不是浮點類型,那麼除以100將失去兩個最低有效數字。爲了避免這種情況,你可以將當整數值轉換爲decimal

return (val/100M).ToString("N2", new CultureInfo("de-DE")); 
+0

+1也很乾淨的解決方案。 – Kamal 2010-03-19 11:23:22