首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在格式字符串中指定自定义的数千分隔符

如何在格式字符串中指定自定义的数千分隔符
EN

Stack Overflow用户
提问于 2011-08-26 08:46:45
回答 2查看 4.5K关注 0票数 10

当我尝试下面的代码时,我得到了输出2 084 001。这里有什么问题吗?我的格式字符串不是应该覆盖当前区域性设置吗?

代码语言:javascript
复制
decimal v = 2084000.7621m;
System.Console.WriteLine(v.ToString("#,###,###"));
System.Console.ReadLine();

如果我修改代码以使用ToString("#,###,###", CultureInfo.InvariantCulture),我将得到预期的输出,即2,084,001,但当我在数据绑定控件上设置DataFormatString属性时,无法指定格式提供程序。

警告:使用转义文字组分隔符时(如下面的“接受”和其他答案中所述),即使不需要,也始终输出所使用的文字字符,例如,将格式字符串#\,###\,###应用于324的值将导致输出值,,324

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-26 09:13:28

就我所理解的Custom Numeric Format Strings而言,,符号是将组分隔符放置到格式中(而不是指定要使用的字符)。要使它成为显式符号,需要使用转义字符\

代码语言:javascript
复制
v.ToString(@"#\,###\,###")

它的缺点是格式字符串取决于数字的大小。在这种情况下,即使数字更小或更高,也总是在结果字符串中得到两个逗号。

若要重写组分隔符,需要指定您自己的NumberFormatInfo

让这个测试正常运行:

代码语言:javascript
复制
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));

实际上,您在格式字符串中放置的组分隔符的位置和数量并不重要。您还可以使用完全相同的结果来实现它:"#,#.####"。(这是使用组分隔符的优点,而不是第一个解决方案)。

票数 7
EN

Stack Overflow用户

发布于 2011-08-26 09:14:50

您的问题是,格式字符串中的,字符并不意味着“插入逗号”;它实际上意味着“插入当前区域设置的数千个分隔符”,这恰好是默认区域设置中的一个空格。

您需要将反斜杠\放在格式字符串的逗号前面,从而转义逗号。您可能需要使用双反斜杠(或逐字字符串)使编译器按照您的意愿接受转义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7202162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档