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

时间:2008-09-19 21:26:22

标签: c# .net

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

22 个答案:

答案 0 :(得分:1080)

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

答案 1 :(得分:331)

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

myInteger.ToString("N0")

答案 2 :(得分:138)

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

答案 3 :(得分:93)

如果您想要特定文化,可能需要尝试:

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

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

注意:有些文化使用,来表示小数而不是.,所以要小心。

答案 4 :(得分:69)

标准格式及其相关输出

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

答案 5 :(得分:38)

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

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

答案 6 :(得分:32)

String.Format("{0:#,###,###.##}", MyNumber)

这会在相关点给你逗号。

答案 7 :(得分:29)

投票最多的答案很棒,并且有效期约7年。随着C#6.0的引入,特别是字符串插值,更简洁,更安全的方式来做所谓的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

变量i代替占位符(即{0})。因此,不需要记住哪个对象到达哪个位置。格式(即:n)没有改变。有关新功能的完整功能,您可以go to this page

答案 8 :(得分:21)

如果您希望强制使用“,”分隔符而不管文化(例如在跟踪或日志消息中),以下代码将起作用,并且还有一个额外的好处,即告诉下一个发现它的人是谁做。

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

设置格式为“19,400,320”

答案 9 :(得分:21)

就这么简单:

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

更多信息位于Here

答案 10 :(得分:20)

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

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"

答案 11 :(得分:11)

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

答案 12 :(得分:9)

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

这对我有用

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

输出 19950000

答案 13 :(得分:8)

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

答案 14 :(得分:8)

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

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

或使用yourVariable

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

答案 15 :(得分:5)

String.Format("0,###.###"); also works with decimal places

答案 16 :(得分:4)

您可以使用此类函数格式化数字,并可选择传入所需的小数位。如果未指定小数位,则将使用两位小数。

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

我使用小数但您可以将类型更改为任何其他类型或使用匿名对象。您还可以为负小数位值添加错误检查。

答案 17 :(得分:1)

C#7.1(也许更早吗?)通过字符串插值使它看起来应尽可能简单和美观:

var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";

答案 18 :(得分:0)

您需要相同的格式值和特定于文化的内容。

 Double value= 1234567;
 value.ToString("#,#.##", CultureInfo.CreateSpecificCulture("hi-IN"));

输出:12,34,567

答案 19 :(得分:-2)

以下是Java中的一个很好的解决方案!

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

输出: Rs.9,999,999.00

爱沙尼亚语区域设置输出

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

输出: 9 999 999€

正如您在不同的输出中所看到的,您不必担心分隔符是逗号,甚至空间您可以获得根据i18n标准格式化的数字

答案 20 :(得分:-2)

我过去不再担心文化和潜在格式问题的方法是我将其格式化为货币并随后取出货币符号。

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

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

答案 21 :(得分:-3)

如果要在DataGridview中显示它,则应更改其类型,因为default是String,因为您将其更改为decimal,它将其视为带浮点的Number

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