Спецификатор точности в качестве параметра, подобного printf, но в String.Format - PullRequest
8 голосов
/ 26 августа 2010

Используя printf, я мог бы указать значение точности как дополнительный параметр, используя *.Есть ли такая же функциональность в C # String.Format?

edit: Например:

Console.WriteLine("{0:D*}",1,4); // Outputs 0001

Ответы [ 5 ]

4 голосов
/ 27 августа 2010

Нет, String.Format не поддерживает оператор звезды.Вам нужно будет использовать либо конкатенацию строк

Console.WriteLine("{0:D" + myPrecision.ToString() + "}",1);

, либо вложенную String.Format s

Console.WriteLine(String.Format("{{0:D{0}}}", 4), 1);
4 голосов
/ 27 августа 2010

Форматирование строки формата должно помочь:

var number = 1;
var width = 4;
Console.WriteLine(String.Format("{{0:D{0}}}", width), number);

Будет выведено 0001.

Обратите внимание, как {{ и }} используются для экранирования {и } в строке формата.

2 голосов
/ 26 августа 2010

Да, это возможно.Вам просто нужно добавить число точности после спецификатора формата.Например,

Console.WriteLine("{0:D4}",1); // Outputs 0001;

То, что делает модификатор точности, зависит от выбранного формата.В этом случае D обозначает десятичный вывод.Вот ссылка на типы числовых форматов и значение точности для каждого из них.

1 голос
/ 04 октября 2016

Мой обходной путь аналогичен тому, как Qt реализует QString::arg(). Я просто поместил заполнитель, а затем заменил его значением numericPrecision.

numericPrecision = "N2";
var summary = string.Format(
    "{0}: {1:_np_}, {2}: {3:_np_}, {4}: {5:_np_}".Replace("_np_", numericPrecision),
    title1, value1,
    title2, value2,
    title3, value3);
0 голосов
/ 12 апреля 2016

Чтобы отформатировать строку с выравниванием по левому краю для указанной длины.

int len = 20;
string fmt = string.Format( "{{0,-{0}}}", len );
string name = string.Format( fmt, "a persons name" );

или

name.PadRight( len );

Результатом должно быть имя, которое дополняется справа для общей длиныиз 20 символов.

...