949

我想在数字的千位中添加一个逗号。

String.Format()将是正确的路径吗?我会使用什么格式?

4

22 回答 22

1392
String.Format("{0:n}", 1234);  // Output: 1,234.00
String.Format("{0:n0}", 9876); // No digits after the decimal point. Output: 9,876
于 2008-09-19T21:29:06.970 回答
427

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

myInteger.ToString("N0")
于 2010-10-19T05:04:38.857 回答
158
int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000
于 2008-11-17T15:15:07.727 回答
111

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

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

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

注意:有些文化习惯于,表示小数,而不是.小心。

于 2010-10-26T09:22:58.720 回答
89

标准格式及其相关输出,

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
于 2013-03-01T23:44:34.140 回答
52

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

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
于 2015-07-09T23:43:49.617 回答
44

投票最多的答案非常好,并且已经帮助了大约 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

变量i 放置在占位符的位置(即{0})。所以没有必要记住哪个物体去哪个位置。格式(即:n)没有改变。有关新功能的完整功能,您可以访问此页面

于 2015-08-12T02:51:49.590 回答
38

就这么简单:

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

更多信息在这里

于 2017-08-24T05:08:32.490 回答
33
String.Format("{0:#,###,###.##}", MyNumber)

这将在相关点给你逗号。

于 2008-09-19T21:29:07.907 回答
24

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

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”

于 2017-02-23T15:00:25.797 回答
21

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

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

设置为“19,400,320”

于 2013-03-27T19:55:29.937 回答
20

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}";
于 2019-02-09T13:21:27.963 回答
13

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

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

或使用你的变量

 double yourVariable = 12456.0;
 $"{yourVariable:n0}"; 
 $"{yourVariable:n2}"; 
于 2016-11-02T20:22:05.510 回答
11
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
于 2010-05-20T15:36:29.930 回答
11

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

这对我有用

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

输出 19,950,000

于 2012-10-23T21:19:57.040 回答
9

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

于 2008-10-12T00:35:09.300 回答
6
String.Format("0,###.###"); also works with decimal places
于 2018-02-13T12:20:52.410 回答
3

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

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

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

于 2014-12-23T11:13:38.250 回答
0

您想要相同的格式值和特定的文化。

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

输出:12,34,567

于 2021-05-07T11:57:08.743 回答
0

我尝试了上面的许多建议,但以下对我来说效果更好:

string.Format("{0:##,###.00}", myValue)

但是当你有像 0.2014 这样的值时它会失败,它给出 .21 为此我使用

string.Format("{0:#,##0.00}", myValue)
于 2021-12-10T19:06:59.860 回答
-3

如果你想在 DataGridview 中显示它,你应该改变它的类型,因为默认是 String 并且因为你把它改成小数,所以它认为是带浮点数的数字

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
于 2013-11-28T03:36:47.573 回答
-4

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

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

{
  formattedValue = result.ToString("C").Substring(1);
}
于 2012-06-13T09:55:01.233 回答