关于c#:. NET String.Format()在一个数字的千位上添加逗号

.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


如果您想要特定于区域性,可以尝试以下操作:

(19950000.0).ToString("N",new CultureInfo("en-US"))=19950000.00

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

注:有些文化使用,表示十进制,而不是.,所以要小心。


标准格式及其相关输出,

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的引入,特别是字符串插值,有了一种更整洁、更安全的方法来完成已被要求的操作to add commas in thousands place for a number

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

其中变量i代替占位符(即{0})。所以不需要记住哪个物体在哪个位置。格式(即:n未更改)。要了解最新功能的完整功能,您可以转到此页。


如果您希望强制使用","分隔符,而不考虑区域性(例如在跟踪或日志消息中),那么下面的代码将起作用,并且有额外的好处,可以告诉下一个偶然发现它的人您正在做什么。

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


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

这对我有用

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

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

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

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
Locale locale = new Locale("de","DE");

产量:9.999.999,00欧元

印度本地输出

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

输出:Rs.9999999.00

爱沙尼亚地区输出

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

产出: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