Кажется, есть разница с (3).
Вот код, который я набрал:
static void Main(string[] args)
{
string[] arrFormat = new string[] { "{0:#,0}", "{0:#,#0}", "{0:#,##}", "{0:#,###0}" };
int[] ints = new int[] {0, 1, 10, 19, 100, 123, 1234, 12345};
double[] doubles = new double[]{ 0, 0.1, 1.1, 10.12, 100.1, 123.45,
12334.4567, 1234.56, 12345.6};
foreach (string specifier in arrFormat)
{
Console.Write(specifier + ":\t\t" );
foreach (int i in ints)
{
Console.Write(string.Format(specifier, i) + ", ");
}
Console.WriteLine("");
}
Console.WriteLine("-------------------------------------------");
foreach (string specifier in arrFormat)
{
Console.Write(specifier + ":\t\t");
foreach (double d in doubles)
{
Console.Write(string.Format(specifier, d) + ", ");
}
Console.WriteLine("");
}
}
Вот вывод:
{0:#,0}: 0, 1, 10, 19, 100, 123, 1,234, 12,345,
{0:#,#0}: 0, 1, 10, 19, 100, 123, 1,234, 12,345,
{0:#,##}: , 1, 10, 19, 100, 123, 1,234, 12,345,
{0:#,###0}: 0, 1, 10, 19, 100, 123, 1,234, 12,345,
-------------------------------------------
{0:#,0}: 0, 0, 1, 10, 100, 123, 12,334, 1,235, 12,346,
{0:#,#0}: 0, 0, 1, 10, 100, 123, 12,334, 1,235, 12,346,
{0:#,##}: , , 1, 10, 100, 123, 12,334, 1,235, 12,346,
{0:#,###0}: 0, 0, 1, 10, 100, 123, 12,334, 1,235, 12,346,
[Если кто-то хочет улучшить тестовые случаи, не стесняйтесь.]
Статья SteveX является очень хорошим справочником для строк форматирования: Форматирование строк в C #