.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