2013-07-08 53 views
23

假設我有我不得不格式化,以每千應該用空格分開,下面的十進制數:在C#與空間我怎麼會分隔千

897.11 to 897.11 
1897.11 to 1 897.11 
12897.11 to 12 897.11 
123897.11 to 123 897.11 

我試圖Decimal.ToString的(」 0 000.00「)。雖然這個數字在1897.11時效果很好。但是當它是897.11時,我得到0 897.11。

回答

46

傳遞自定義NumberFormatInfo與自定義NumberGroupSeparator property,並使用#,# format告訴它做數字組。本例使用不變文化的數字格式作爲基礎。

var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone(); 
nfi.NumberGroupSeparator = " "; 
string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11" 
+2

+1,我已編輯此答案以正確處理零值 - 之前的格式字符串「#,#。00」零表示爲「.00」,現在它是「0.00」 – n00b

5

custom format string,但使用'#'而不是'0'0是一個強制令牌,它將在那裏,無論數字多長時,井號(#)是可選的令牌,它只會用於數字實際上在數字中。

Decimal.ToString("# ###.00") 

注意。我會在這裏留下,但@Tim S的回答是更好的答案。

當我嘗試這個,我看到它只生成第一個分隔符...我猜分隔符只適用於逗號和句點。作爲一種解決方法(達到您所期望的最大數量),請嘗試使用此功能。

Decimal.ToString("# ### ### ### ###.00") 
+0

對於'1234897.11',這產生'1234 897.11'(即它只分離第一組)。 –

+0

@Tim,這聽起來像框架代碼中的錯誤。看到我的編輯 –

+2

@Tin S的答案比我的好。不知道'NumberFormatInfo'是否存在 –

4

試試這個

int testNumber = 134566548; 
Console.WriteLine(string.Format("{0:N}", testNumber)); 

您將收到: 134 566 548,00

不要忘了你的文化。

13

你需要一個自己改變性格自定義數字格式提供:

static void Main(string[] args) 
    { 
     decimal d = 2000000; 

     var f = new NumberFormatInfo {NumberGroupSeparator = " "}; 

     var s = d.ToString("n", f); // 2 000 000.00 
    } 

在這裏,我還指定了格式化爲一個號碼(使用"n"),請訪問以下鏈接爲其他格式選項:

Standard Numeric Format Strings

在這種情況下,如果格式化爲貨幣或百分比它不會工作,因爲您可能已經注意到NumberFormatInfo具有單獨的屬性。

當前的文化格式信息可以在System.Globalization.CultureInfo.CurrentCulture.NumberFormat找到。

0

挪威的語言環境使用空格作爲分隔符,所以如果你是爲挪威人專門設計一個網站或應用程序,那麼你可以使用:

(123897.11).ToString("n",new CultureInfo("nb-NO")) 

"123 897,11" 

導致顯然,如果你不是在爲挪威市場編寫應用程序,那麼這將是一個愚蠢的解決方案。