Pro*_*ofK 10 .net formatting localization cultureinfo
当我尝试下面的代码时,我得到输出2 084 001.这可能有什么问题?我的格式字符串不应该覆盖当前的文化设置吗?
decimal v = 2084000.7621m;
System.Console.WriteLine(v.ToString("#,###,###"));
System.Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
如果我修改要使用的代码ToString("#,###,###", CultureInfo.InvariantCulture),我得到预期的输出,即2,084,001,但是当我在数据绑定控件上设置DataFormatString属性时,我无法指定格式提供程序.
警告:当使用转义的文字组分隔符时,如下面在接受和其他答案中所述,即使不需要,也始终输出使用的文字字符,例如将格式字符串#\,###\,###应用于324输出值中的结果值的,,324.
据我所知,自定义数字格式字符串,,符号是将组分隔符放入格式(而不是指定要使用的字符).要使其成为显式符号,您需要使用转义字符\.
v.ToString(@"#\,###\,###")
Run Code Online (Sandbox Code Playgroud)
其缺点是格式字符串取决于数字的大小.在这种情况下,即使数字较小或较高,您在结果字符串中始终会得到两个逗号.
要覆盖组分隔符,您需要指定自己的分隔符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));
Run Code Online (Sandbox Code Playgroud)
实际上,您在格式字符串中放置的组分隔符的位置和数量并不重要.你也可以做到:"#,#.####"结果完全相同.(与第一种解决方案相比,这是使用组分隔符的优势).