Dot-Net
如何在格式字元串中指定自定義千位分隔符
當我嘗試下面的程式碼時,我得到輸出2 084 001。這裡有什麼問題?我的格式字元串不應該覆蓋目前的文化設置嗎?
decimal v = 2084000.7621m; System.Console.WriteLine(v.ToString("#,###,###")); System.Console.ReadLine();如果我修改要使用的程式碼
ToString("#,###,###", CultureInfo.InvariantCulture),我會得到預期的輸出,即2,084,001 ,但是當我在數據綁定控制項上設置DataFormatString屬性時,我無法指定格式提供程序。**警告:**使用轉義文字組分隔符時,如下面接受的和其他答案中所述,即使不需要,也始終輸出使用的文字字元,例如將格式字元串
#\,###\,###應用於324結果值的,,324。
據我了解Custom Numeric Format Strings,該
,符號是將組分隔符放入格式中(而不是指定要使用的字元)。要使其成為顯式符號,您需要使用轉義字元\。v.ToString(@"#\,###\,###")其缺點是格式字元串取決於數字的大小。在這種情況下,您總是會在結果字元串中得到兩個逗號,即使數字更小或更大。
要覆蓋組分隔符,您需要指定自己的
NumberFormatInfo.讓這個測試工作:
decimal v = 2084000.7621m; // clone the InvariantCulture to avoid specifying everything from scratch var myNumberFormat = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone(); myNumberFormat.NumberGroupSeparator = "@"; myNumberFormat.NumberDecimalSeparator = "*"; Assert.AreEqual("2@084@000*7621", v.ToString("#,###,###.####", myNumberFormat));實際上,您在格式字元串中放入的位置和數量並不重要。你也可以做到:
"#,#.####"結果完全相同。(與第一個解決方案相比,這就是使用組分隔符的優點)。