假設我有我不得不格式化,以每千應該用空格分開,下面的十進制數:在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。
假設我有我不得不格式化,以每千應該用空格分開,下面的十進制數:在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。
傳遞自定義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"
與custom format string,但使用'#'而不是'0'0是一個強制令牌,它將在那裏,無論數字多長時,井號(#)是可選的令牌,它只會用於數字實際上在數字中。
Decimal.ToString("# ###.00")
注意。我會在這裏留下,但@Tim S的回答是更好的答案。
當我嘗試這個,我看到它只生成第一個分隔符...我猜分隔符只適用於逗號和句點。作爲一種解決方法(達到您所期望的最大數量),請嘗試使用此功能。
Decimal.ToString("# ### ### ### ###.00")
對於'1234897.11',這產生'1234 897.11'(即它只分離第一組)。 –
@Tim,這聽起來像框架代碼中的錯誤。看到我的編輯 –
@Tin S的答案比我的好。不知道'NumberFormatInfo'是否存在 –
試試這個
int testNumber = 134566548;
Console.WriteLine(string.Format("{0:N}", testNumber));
您將收到: 134 566 548,00
不要忘了你的文化。
你需要一個自己改變性格自定義數字格式提供:
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
找到。
挪威的語言環境使用空格作爲分隔符,所以如果你是爲挪威人專門設計一個網站或應用程序,那麼你可以使用:
(123897.11).ToString("n",new CultureInfo("nb-NO"))
在
"123 897,11"
導致顯然,如果你不是在爲挪威市場編寫應用程序,那麼這將是一個愚蠢的解決方案。
+1,我已編輯此答案以正確處理零值 - 之前的格式字符串「#,#。00」零表示爲「.00」,現在它是「0.00」 – n00b