.NET String.Format()在数千个位置为逗号添加逗号

Sei*_*bar 794 .net c#

我想在数千个地方添加一个逗号.String.Format()

Sei*_*bar 1140

String.Format("{0:n}", 1234);  // Output: 1,234.00
String.Format("{0:n0}", 9876); // No digits after the decimal point. Output: 9,876
Run Code Online (Sandbox Code Playgroud)

  • @Justin:根据http://msdn.microsoft.com/en-us/library/0c899ak8.aspx,','(和'.')被替换为正确的本地化字符. (56认同)
  • `String.Format("{0:#,## 0}",1234);`也适用于无小数位. (39认同)
  • 如何复制"N"说明符,但数字中包含的十进制数字是多少? (8认同)
  • @VVVV - 然后你可能传入*string*而不是*number*.如果你有一个字符串,你需要先转换为float或double.尝试`string.Format("{0:n0}",Double.Parse(yourValue));` (6认同)
  • 为了复制“n”说明符的行为,但要使用数字本身中存在的尽可能多的十进制数字,我必须使用此格式字符串而不是“#,##0.##”(来自此处的另一个答案) (3认同)
  • 如果你想在你的页面上强制使用除系统定义格式之外的十进制格式,你可以像这个例子一样改变 `CurrentCulture`: `var nlBE = new System.Globalization.CultureInfo("nl-BE"); nlBE.NumberFormat.CurrencyDecimalDigits = 2; nlBE.NumberFormat.CurrencyDecimalSeparator = ","; nlBE.NumberFormat.CurrencyGroupSeparator = "."; System.Threading.Thread.CurrentThread.CurrentCulture = nlBE;` (2认同)

alc*_*cal 361

我发现这是最简单的方法:

myInteger.ToString("N0")
Run Code Online (Sandbox Code Playgroud)

  • 不应该是myInteger.ToString("N0")... string.tostring我觉得不行. (16认同)
  • 您还可以将其与 string.Format 一起使用,如 string.Format("Here is some number with commas, and no Decals, {0:N0}", 123456789(; (2认同)
  • 这是有效的,但它在区域设置上发生了变化 (2认同)

小智 144

int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000
Run Code Online (Sandbox Code Playgroud)

  • 从国际化的角度来看,这种解决方案并不好 - 其他文化使用除`,`之外的字符作为千位分隔符,例如空格甚至`.`. (27认同)
  • @MacSigler但是,这个代码**不会**_always_打印出一个逗号.只有当文化是一个期望逗号(例如en-US或invariant)的文化时.如果文化是期望另一个分隔符(例如`.`),.NET将自动用该分隔符替换逗号.我再次强烈建议您阅读Roger发布的链接,如果您仍然不明白为什么会这样. (10认同)
  • @MacSigler事实并非如此,请参阅Roger Lipscombe对上述答案的评论:String.Format将自动应用本地化. (7认同)
  • 工作感谢+ 1.已扩展,因此显示最多2 dp number.ToString("#,## 0.##") (5认同)
  • @MacSigler贾斯汀的评论仍然是正确的,因为如果你没有明确强制文化进入en-US,它将从本地机器继承文化设置.我的理解是编译上面的代码,然后在具有不同文化(具有不同数字分隔符)的两台机器上运行它将产生不同的结果.如果您希望_always_生成逗号,则需要显式设置使用逗号的文化(例如,不变量). (4认同)

pra*_*bir 96

如果您想要特定于文化,您可能想尝试这样:

(19950000.0).ToString("N",new CultureInfo("en-US")) = 19,950,000.00

(19950000.0).ToString("N",new CultureInfo("is-IS")) = 19.950.000,00

注意:有些文化,用来表示十进制而不是.小心.

  • 答对了!(和“N0”隐藏小数) (6认同)

Cod*_*Tao 72

标准格式及其相关输出,

Console.WriteLine("Standard Numeric Format Specifiers");
String s = String.Format("(C) Currency: . . . . . . . . {0:C}\n" +
                    "(D) Decimal:. . . . . . . . . {0:D}\n" +
                    "(E) Scientific: . . . . . . . {1:E}\n" +
                    "(F) Fixed point:. . . . . . . {1:F}\n" +
                    "(G) General:. . . . . . . . . {0:G}\n" +
                    "    (default):. . . . . . . . {0} (default = 'G')\n" +
                    "(N) Number: . . . . . . . . . {0:N}\n" +
                    "(P) Percent:. . . . . . . . . {1:P}\n" +
                    "(R) Round-trip: . . . . . . . {1:R}\n" +
                    "(X) Hexadecimal:. . . . . . . {0:X}\n",
                    - 1234, -1234.565F);
Console.WriteLine(s);
Run Code Online (Sandbox Code Playgroud)

示例输出(en-us culture):

(C) Currency: . . . . . . . . ($1,234.00)
(D) Decimal:. . . . . . . . . -1234
(E) Scientific: . . . . . . . -1.234565E+003
(F) Fixed point:. . . . . . . -1234.57
(G) General:. . . . . . . . . -1234
    (default):. . . . . . . . -1234 (default = 'G')
(N) Number: . . . . . . . . . -1,234.00
(P) Percent:. . . . . . . . . -123,456.50 %
(R) Round-trip: . . . . . . . -1234.565
(X) Hexadecimal:. . . . . . . FFFFFB2E
Run Code Online (Sandbox Code Playgroud)

  • 这个答案包含了很多有用的信息。通过示例学习我现在看到了字符串格式中 0 和 1 的含义。 (2认同)

Den*_*nis 39

这是最好的格式.适用于所有这些情况:

String.Format( "{0:#,##0.##}", 0 ); // 0
String.Format( "{0:#,##0.##}", 0.5 ); // 0.5 - some of the formats above fail here. 
String.Format( "{0:#,##0.##}", 12314 ); // 12,314
String.Format( "{0:#,##0.##}", 12314.23123 ); // 12,314.23
String.Format( "{0:#,##0.##}", 12314.2 ); // 12,314.2
String.Format( "{0:#,##0.##}", 1231412314.2 ); // 1,231,412,314.2
Run Code Online (Sandbox Code Playgroud)


Ste*_*ton 34

String.Format("{0:#,###,###.##}", MyNumber)
Run Code Online (Sandbox Code Playgroud)

那将在相关点给你逗号.

  • 这是事实,但不能保证在千分之一时给你逗号,因为它尊重用户的语言环境. (12认同)
  • ":n"方法更好,因为它应该尊重用户的语言环境. (10认同)
  • 回到你身边:这是事实,但不能保证尊重用户的语言环境,因为它使用逗号作为千位分隔符.(例如,在葡萄牙,逗号是小数分隔符.) (2认同)

von*_* v. 32

投票最多的答案很棒,并且有效期约7年.随着C#6.0的引入,特别是字符串插值,有一个整洁的,IMO更安全的方式来做所谓的问题to add commas in thousands place for a number:

var i = 5222000;
var s = $"{i:n} is the number"; // results to > 5,222,000.00 is the number
s = $"{i:n0} has no decimal"; // results to > 5,222,000 has no decimal
Run Code Online (Sandbox Code Playgroud)

变量i 放在占位符(即{0})的位置.所以没有必要记住哪个对象到达哪个位置.格式(即:n)没有改变.有关新功能的完整功能,您可以转到此页面.


a_m*_*dev 26

这很简单:

float num = 23658; // for example 
num = num.ToString("N0"); // Returns 23,658
Run Code Online (Sandbox Code Playgroud)

更多信息在这里


Rav*_*sai 21

如果您希望强制使用","分隔符而不考虑文化(例如在跟踪或日志消息中),则以下代码将起作用并且具有额外的好处,即告诉下一个发现它的人正是您正在做的事情.

int integerValue = 19400320; 
string formatted = string.Format(CultureInfo.InvariantCulture, "{0:N0}", integerValue);
Run Code Online (Sandbox Code Playgroud)

集格式为"19,400,320"


Yit*_*erg 20

以下示例显示使用包含零占位符的自定义格式字符串格式化的多个值.

String.Format("{0:N1}", 29255.0);
Run Code Online (Sandbox Code Playgroud)

要么

29255.0.ToString("N1")
Run Code Online (Sandbox Code Playgroud)

结果"29,255.0"

String.Format("{0:N2}", 29255.0);
Run Code Online (Sandbox Code Playgroud)

要么

29255.0.ToString("N2")
Run Code Online (Sandbox Code Playgroud)

结果"29,255.00"


Mar*_*sky 17

C# 7.1(也许更早?)通过字符串插值使这一切变得简单而美观:

var jackpot = 1_000_000; // underscore separators in numeric literals also available since C# 7.0
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";
Run Code Online (Sandbox Code Playgroud)


p.c*_*ell 11

int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
Run Code Online (Sandbox Code Playgroud)

  • 或Console.WriteLine("{0:#,#}",num); 如果你只是想打印它.但是我认为string.Format(...)更有用. (3认同)

bra*_*roo 11

更简单,使用字符串插值而不是String.Format

 $"{12456:n0}"; // 12,456
 $"{12456:n2}"; // 12,456.00
Run Code Online (Sandbox Code Playgroud)

或使用yourVariable

 double yourVariable = 12456.0;
 $"{yourVariable:n0}"; 
 $"{yourVariable:n2}"; 
Run Code Online (Sandbox Code Playgroud)


小智 9

例如String.Format("{0:0,0}", 1);返回01,对我来说无效

这适合我

19950000.ToString("#,#", CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)

产量19,950,000


小智 8

请注意,您要格式化的值应为数字.它看起来不像是数字的字符串表示,格式是逗号.


小智 5

String.Format("0,###.###"); also works with decimal places
Run Code Online (Sandbox Code Playgroud)