.NET String.Format() to add commas in thousands place for a number
我想在一个数字的千位上加一个逗号。EDOCX1?0?
1 2 | String.Format("{0:n}", 1234); // Output: 1,234.00 String.Format("{0:n0}", 9876); // No digits after the decimal point. Output: 9,876 |
我发现这是最简单的方法:
1 | myInteger.ToString("N0") |
1 2 3 | int number = 1000000000; string whatYouWant = number.ToString("#,##0"); //You get: 1,000,000,000 |
如果您想要特定于区域性,可以尝试以下操作:
注:有些文化使用
标准格式及其相关输出,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Console.WriteLine("Standard Numeric Format Specifiers"); String s = String.Format("(C) Currency: . . . . . . . . {0:C} " + "(D) Decimal:. . . . . . . . . {0:D} " + "(E) Scientific: . . . . . . . {1:E} " + "(F) Fixed point:. . . . . . . {1:F} " + "(G) General:. . . . . . . . . {0:G} " + " (default):. . . . . . . . {0} (default = 'G') " + "(N) Number: . . . . . . . . . {0:N} " + "(P) Percent:. . . . . . . . . {1:P} " + "(R) Round-trip: . . . . . . . {1:R} " + "(X) Hexadecimal:. . . . . . . {0:X} ", - 1234, -1234.565F); Console.WriteLine(s); |
示例输出(en-US文化):
1 2 3 4 5 6 7 8 9 10 | (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 |
这是最好的格式。适用于所有这些情况:
1 2 3 4 5 6 | 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 |
1 | String.Format("{0:#,###,###.##}", MyNumber) |
这将在相关点为您提供逗号。
投票最多的答案很好,已经帮助了大约7年。随着C 6.0的引入,特别是字符串插值,有了一种更整洁、更安全的方法来完成已被要求的操作
1 2 3 | 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 |
其中变量
如果您希望强制使用","分隔符,而不考虑区域性(例如在跟踪或日志消息中),那么下面的代码将起作用,并且有额外的好处,可以告诉下一个偶然发现它的人您正在做什么。
1 2 | int integerValue = 19400320; string formatted = string.Format(CultureInfo.InvariantCulture,"{0:N0}", integerValue); |
设置为"19400320"
就这么简单:
1 2 | float num = 23658; // for example num = num.ToString("N0"); // Returns 23,658 |
更多信息在这里
下面的示例显示几个值,这些值是使用包含零占位符的自定义格式字符串格式化的。
1 | String.Format("{0:N1}", 29255.0); |
或
1 | 29255.0.ToString("N1") |
结果"29255.0"
1 | String.Format("{0:N2}", 29255.0); |
或
1 | 29255.0.ToString("N2") |
结果"29255.00"
1 2 | int num = 98765432; Console.WriteLine(string.Format("{0:#,#}", num)); |
例如,
这对我有用
1 | 19950000.ToString("#,#", CultureInfo.InvariantCulture)); |
输出一千九百九十五万
请注意,您正在格式化的值应该是数字。它看起来不像是用一个数字的字符串表示,格式是用逗号。
更简单,使用字符串插值而不是字符串.format
1 2 | $"{12456:n0}"; // 12,456 $"{12456:n2}"; // 12,456.00 |
或者使用你的变量
1 2 3 | double yourVariable = 12456.0; $"{yourVariable:n0}"; $"{yourVariable:n2}"; |
1 | String.Format("0,###.###"); also works with decimal places |
您可以使用这样的函数来格式化数字,并可以选择传递所需的小数点。如果未指定小数位数,则将使用两个小数位数。
1 2 3 4 | public static string formatNumber(decimal valueIn=0, int decimalPlaces=2) { return string.Format("{0:n" + decimalPlaces.ToString() +"}", valueIn); } |
我使用decimal,但您可以将类型更改为任何其他类型或使用匿名对象。您还可以添加对负小数位值的错误检查。
C 7.1(也许更早?)通过字符串插值,使其看起来尽可能简单美观:
1 2 3 | var jackpot = 1000000; var niceNumberString = $"Jackpot is {jackpot:n}"; var niceMoneyString = $"Jackpot is {jackpot:C}"; |
我过去不再担心文化和潜在的格式化问题的方法是将其格式化为货币,然后取出货币符号。
1 2 3 | { formattedValue = result.ToString("C").Substring(1); } |
下面是Java中的一个好的解决方案!
1 2 | NumberFormat fmt = NumberFormat.getCurrencyInstance(); System.out.println(fmt.format(n)); |
或者,为了获得一个特定地点的区域设置,您可能需要一种更强大的方法,然后按如下所示使用:
1 2 3 4 | int n=9999999; Locale locale = new Locale("en","US"); NumberFormat fmt = NumberFormat.getCurrencyInstance(locale); System.out.println(fmt.format(n)); |
美国地区输出:$9999999.00
德语区域设置输出
1 |
产量:9.999.999,00欧元
印度本地输出
1 |
输出:Rs.9999999.00
爱沙尼亚地区输出
1 |
产出:9 999 999欧元
正如您在不同的输出中看到的,您不必担心分隔符是逗号、点甚至是空格,您可以根据i18n标准对数字进行格式化。
如果要在DataGridView中显示它,您应该更改它的类型,因为默认值是字符串,并且由于您将其更改为十进制,它认为是带浮点的数字。
1 2 3 4 5 6 7 | 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 |