Разница между пользовательскими числовыми форматерами с групповыми форматерами? - PullRequest
1 голос
/ 24 декабря 2011

К сожалению, в документации MSDN не очень ясно об этом. Мне интересно, в чем разница между следующими числовыми форматерами.

  1. #,#

  2. #,0

  3. #,#0

  4. #,##0

  5. #,###0 (не уверен, что это даже допустимо, так как я в настоящее время не могу проверить)

Насколько я могу судить, все они будут форматировать числа, такие как 12345 как 12,345. Конечно, есть некоторая тонкая разница, хотя в некоторых случаях?

Наконец, есть ли допустимые строки формата со спецификаторами слева от #,# или #,0? Если так, что они делают?

1 Ответ

1 голос
/ 24 декабря 2011

Кажется, есть разница с (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 #

...