提问



我想在数千个地方添加一个逗号。 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

其它参考1


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


myInteger.ToString("N0")

其它参考2


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

其它参考3


如果您想要特定于文化,您可能想尝试这样:


(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


标准格式及其相关输出,


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


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


这会在相关点给你逗号。

其它参考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

其它参考7


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


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


设置格式为19,400,320

其它参考8


投票最多的答案很棒,并且有效期约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)没有改变。有关新内容的完整功能,您可以访问此页面。[39]

其它参考9


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


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

其它参考10


这很简单:


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


更多信息在这里[40]

其它参考11


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

其它参考12


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


这对我有用


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


产量
19,950,000

其它参考13


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

其它参考14


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


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


或使用yourVariable


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

其它参考15


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


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


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

其它参考16


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

其它参考17


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


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


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

其它参考18


以下是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标准格式化的数字

其它参考19


如果要在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