.net - 如何在格式字符串中指定自定义千位分隔符

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

decimal v = 2084000.7621m;
System.Console.WriteLine(v.ToString("#,###,###"));
System.Console.ReadLine();

如果我修改代码以使用 ToString("#,###,###", CultureInfo.InvariantCulture),我会得到预期的输出,即 2,084,001 但是当我在数据绑定(bind)控件上设置 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));

实际上,在格式字符串中放入的组分隔符的位置和数量并不重要。你也可以做到: "#,#.####" 得到完全相同的结果。 (与第一种解决方案相比,这就是使用组分隔符的优势)。

https://stackoverflow.com/questions/7202162/

相关文章:

)"修改代码样式">java - groovy intelliJ "angle brackets (<>)"修改代码样式

html - 不熟悉的 Javascript 语法/hack

javascript - Visual Studio 2010 坚持在 JavaScript 中插入

.net - 为什么 DateTime.ToShortTimeString() 不尊重 "Regio

javascript - Bootstrap datepicker 显示的日期格式与值的格式不同

c++ - Eclipse CDT 中的格式(换行)构造函数初始化程序列表

c - 如何将 "unbreak"C 代码与 "Artistic Style"

python - Gtk3 TextBuffer.serialize() 返回带有格式标签的文本,即

java - java.util.Formattable 上的示例是否不正确?

之后强制java xml do">java - 如何在<?xml版本="1.0"编码="UTF-8"?>之后强制java xml do