.NET String.Format()在数字中为千位添加逗号

我想为一个数字在千位加一个逗号。 String.Format()

 String.Format("{0:n}", 1234); //Output: 1,234.00 string.Format("{0:n0}", 9876); // no digits after the decimal point. Output: 9,876 

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

 myInteger.ToString("N0") 
 int number = 1000000000; string whatYouWant = number.ToString("#,##0"); //You get: 1,000,000,000 

如果你想要特定的文化,你可能想尝试这个:

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

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

注:一些文化使用,意思是小数而不是. 所以要小心

标准格式及其相关输出,

 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); 

示例输出(en-us文化):

 (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 
 String.Format("{0:#,###,###.##}", MyNumber) 

这将在相关的点给你逗号。

如果你想强制一个“,”分隔符而不pipe文化(例如在跟踪或日志消息),下面的代码将工作,并有另一个好处,告诉下一个人谁正在做什么绊倒它。

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

套格式化为“19,400,320”

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

 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 

最被投票的答案是伟大的,并有助于大约7年。 随着C#6.0的引入,特别是string插值(String Interpolation),还有一种更简洁,更安全的方式来执行要求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 

其中variablesi代替占位符(即{0} )。 所以没有必要记住哪个物体到哪个位置。 格式(即:n )没有改变。 有关新function的完整function,您可以转到此页面 。

 int num = 98765432; Console.WriteLine(string.Format("{0:#,#}", num)); 

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

这对我有用

 19950000.ToString("#,#", CultureInfo.InvariantCulture)); 

产量19,950,000

请注意,格式化的值应该是数字。 它看起来并不像一个数字的string表示,格式是用逗号。

以下示例显示了使用包含零占位符的自定义格式string格式化的多个值。

 String.Format("{0:N1}", 29255.0); 

要么

 29255.0.ToString("N1") 

结果“29,255.0”

 String.Format("{0:N2}", 29255.0); 

要么

 29255.0.ToString("N2") 

结果“29,255.00”

您可以使用像这样的函数来格式化数字,并可以传递所需的小数位。 如果未指定小数位,则将使用两位小数。

  public static string formatNumber(decimal valueIn=0, int decimalPlaces=2) { return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn); } 

我使用十进制,但你可以改变types为任何其他或使用匿名对象。 您也可以添加错误检查的负小数位值。

更简单,使用string插值而不是String.Format

  $"{12456:n0}"; // 12,456 $"{12456:n2}"; // 12,456.00 

或使用你的variables

  double yourVariable = 12456.0; $"{yourVariable:n0}"; $"{yourVariable:n2}"; 

只是这样简单:

 float num = 23658; // for example num = num.ToString("N0"); // Returns 23,658 

更多信息在这里

Java下面是一个很好的解决scheme!

 NumberFormat fmt = NumberFormat.getCurrencyInstance(); System.out.println(fmt.format(n)); 

或者为了获得某个特定位置的语言环境,可以采用更稳健的方式,然后按如下所示使用:

 int n=9999999; Locale locale = new Locale("en", "US"); NumberFormat fmt = NumberFormat.getCurrencyInstance(locale); System.out.println(fmt.format(n)); 

美国地区输出: $ 9,999,999.00

德语语言环境输出

 Locale locale = new Locale("de", "DE"); 

产量9.999.999,00€

印度语言区域输出

 Locale locale = new Locale("de", "DE"); 

产量9,999,999.00卢比

爱沙尼亚语语言环境输出

 Locale locale = new Locale("et", "EE"); 

产量: 9 999 999€

正如你可以在不同的输出中看到的,你不必担心分隔符是逗号或甚至空格,你可以根据国际标准格式化数字

我以前不再担心文化和潜在的格式问题,我把它格式化为货币,然后拿出货币符号。

if (decimal.TryParse(tblCell, out result))

 { formattedValue = result.ToString("C").Substring(1); } 

如果你想在DataGridview中显示它,你应该改变它的types,因为默认值是String,并且因为你把它改成了十进制数,所以把它看作Number with floating point

 Dim dt As DataTable = New DataTable dt.Columns.Add("col1", GetType(Decimal)) dt.Rows.Add(1) dt.Rows.Add(10) dt.Rows.Add(2) DataGridView1.DataSource = dt