Форматированный вывод в C#

Значит, дело было так. Я писал программу на C#, в которой обрабатывалась матрица вещественных чисел, а затем выводилась в консоль. И все бы ничего, однако возникла одна проблема — вывод матрицы был просто ужасен, в том плане, что каждый элемент содержал разное количество символов, да и к тому же, количество символов, я Вам скажу, было немало. Решение данной проблемы я стал искать в Интернете. И вот, спустя некоторое время и посетив несколько сайтов, я нашел замечательную статью, под названием "String Format for Double [C#]" на сайте csharp-examples.net. Так как этот сайт полностью на английском языке, и мне очень понравилась эта статья, то я решил ее перевести.

Начнем!

В следующих примерах показано, как переводить вещественные числа в строку в C#. Для этого Вы можете использовать статический метод String.Format или методы экземпляров double.ToString и float.ToString.

Цифры после точки

В этом примере демонстрируется перевод вещественного числа в строку с фиксированным числом десятичных знаков. Например, для двух знаков используется шаблон "0.00". Если вещественное число содержит менее десятичных знаков, то оставшиеся позиции справа заполняются нулями, если же число знаков больше — производится округление.

String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"

Для получения строки с переменным количеством знаков используется символ "#". Чтобы на выходе получить строку, в которой количество десятичных знаков будет не более двух, используйте шаблон "0.##".

String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"

Цифры перед точкой

Если на выходе нужно получить строку, в которой число знаков перед точкой будет не менее заданного числа, используйте шаблон, в котором указывается столько нулей перед точкой, сколько символов должно быть минимально.

String.Format("{0:00.0}", 123.4567);      // "123.5"
String.Format("{0:00.0}", 23.4567);       // "23.5"
String.Format("{0:00.0}", 3.4567);        // "03.5"
String.Format("{0:00.0}", -3.4567);       // "-03.5"

Разделитель тысяч

Чтобы в строках явно отделять тысячи, к обычному шаблону слева добавляется "0," (ноль с запятой). К примеру, шаблон "0,0.0" позволяет получить строку, в которой явно отделяются тысячи, а число символов после точки будет не более одного.

String.Format("{0:0,0.0}", 12345.67);     // "12,345.7"
String.Format("{0:0,0}", 12345.67);       // "12,346"

Ведущие Нули

Вещественные числа, не превосходящие единицы по абсолютному значению, можно форматировать двумя способами:

  1. с ведущими нулями
  2. без ведущих нулей

Случай с ведущими нулями — самый обычный. Для него используются те же шаблоны, что описаны выше.

Чтобы получать строки без ведущих нулей, используется символ "#" перед точкой. Например, по шаблону "#.0" получим строки вида ".5""123.5".

String.Format("{0:0.0}", 0.0);            // "0.0"
String.Format("{0:0.#}", 0.0);            // "0"
String.Format("{0:#.0}", 0.0);            // ".0"
String.Format("{0:#.#}", 0.0);            // ""

Выравнивание с помощью пробелов

Для выравнивания числа по правому краю используется запятая перед двоеточием. То есть, ставится запятая, а следом идет число, которое указывает, сколько пробелов должно быть. Пример: "0,10:0.0".

Для выравнивания по левому краю, шаблон будет таким же, за исключением того, что число пробелов должно быть указано со знаком минуса.

P.S. Этот способ можно использовать только с помощью метода String.Format

String.Format("{0,10:0.0}", 123.4567);    // "     123.5"
String.Format("{0,-10:0.0}", 123.4567);   // "123.5     "
String.Format("{0,10:0.0}", -123.4567);   // "    -123.5"
String.Format("{0,-10:0.0}", -123.4567);  // "-123.5    "

Пользовательское форматирование отрицательных чисел и нулей

Если Вам необходимо получить строки в своем стиле форматирования, используйте точку с запятой для разделения шаблона на три части. Первая часть отвечает за форматирование положительных чисел, вторая — отрицательных, третья — нулей. Если Вы пропустите последнюю часть, то нули будут отформатированы так же, как и положительные числа.

String.Format("{0:0.00;minus 0.00;zero}", 123.4567);   // "123.46"
String.Format("{0:0.00;minus 0.00;zero}", -123.4567);  // "minus 123.46"
String.Format("{0:0.00;minus 0.00;zero}", 0.0);        // "zero"

Некоторые забавные примеры

Как Вы могли заметить в предыдущем примере, Вы можете вставить любой текст в шаблон, например, "my text 0.0". Вы даже можете вставить текст между нулями: "0aaa.bbb0".

String.Format("{0:my number is 0.0}", 12.3);   // "my number is 12.3"
String.Format("{0:0aaa.bbb0}", 12.3);          // "12aaa.bbb3"

Небольшое мое дополнение к статье

В зависимости от локали (языкового стандарта программы), выводимые символы могут отличаться. Например, вместо точек выводятся запятые и т.д. К слову, у меня вместо десятичной точки выводится запятая, а вместо тысячного разделителя — пробел.

3 отзыва на “Форматированный вывод в C#

  1. Владимир

    Спаааааасииииииииииибоооооооооооооооооооо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *