Как я могу отформатировать число в строку с ведущими нулями?

246

У меня есть номер, который мне нужно преобразовать в строку. Сначала я использовал это:

Key = i.ToString();

Но я понимаю, что это сортируется в странном порядке, и поэтому мне нужно заполнить его нулями. Как я мог это сделать?

Мэнди Уэстон
источник

Ответы:

344

Скорее просто:

Key = i.ToString("D2");

Dобозначает «десятичное число», 2количество цифр для печати.

Марио
источник
7
если вы используете, string.Format("D2", value)вы получите D2в выводе. это не работает Мы должны использовать "{0:00}"в этом случае.
v.oddou
42
Вы должны использовать string.Format("{0:D2}", value)вместо этого. Просто сказать string.Format("D2", ...)ничего не заменит, несмотря на то, что у вас нет заполнителя.
infinitypanda
5
@infinitypanda понимает, что это будет работать только тогда, когда valueint. valueНапример, если это двойное число, оно должно бытьstring.Format("{0:00}", value)
derekantrican
если мы говорим о «начальных цифрах», я думаю, что ответом будет i.ToString («00»); где «00» представляет ведущие нули .. вы можете увеличить эту сумму в максимально возможной степени.
Дедан
198

Посмотрите форматирование строки в C # для некоторых примеров использования String.Format

На самом деле лучший пример форматирования int

String.Format("{0:00000}", 15);          // "00015"

или используйте строковую интерполяцию :

$"{15:00000}";                           // "00015"
Павел
источник
2
Обратите внимание, что String.Format ("{0: 00000}", "15"); возвращает "15", т.е. он не работает со строкой.
Пол Маккарти
72

Если вы хотите сохранить фиксированную ширину, например, 10 цифр, сделайте это так

Key = i.ToString("0000000000");

Замените столько цифр, сколько хотите.

i = 123затем приведет к Key = "0000000123".

Ойвинд Бротен
источник
63

Поскольку никто еще не упомянул об этом, если вы используете C # версии 6 или выше (то есть Visual Studio 2015), то вы можете использовать интерполяцию строк для упрощения вашего кода. Таким образом, вместо того, чтобы использовать string.Format(...), вы можете просто сделать это:

Key = $"{i:D2}";
DavidG
источник
33

использовать:

i.ToString("D10")

См. Int32.ToString (MSDN) и Стандартные строки числового формата (MSDN).

Или используйте String.PadLeft. Например,

int i = 321;
Key = i.ToString().PadLeft(10, '0');

Приведет к 0000000321. Хотя String.PadLeftне будет работать для отрицательных чисел.

См. String.PadLeft (MSDN).

firefox1986
источник
4
Я предполагаю, что это вас обидит, если вы попытаетесь использовать его с отрицательными числами.
Mario
Спасибо - я использовал второй. Я пропустил ".ToString ()" - он все еще работает.
Sunsetquest
14

Обычно String.Format («формат», объект) предпочтительнее, чем object.ToString («формат»). Следовательно,

String.Format("{0:00000}", 15);  

предпочтительнее,

Key = i.ToString("000000");
Chameera Dedduwage
источник
4
Да, как @cja спросил, почему это предпочтительнее? И я не спорю с утверждением, хотелось бы знать почему.
Кристофер Кинг
Первый синтаксис «кажется» более точным, предсказуемым и понятным. И это было бы лучше указать как Key = String.Format ("{0: 00000}", 15); это сравнивается с Key = i.ToString ("000000"); С первым синтаксисом я почти уверен, что знаю точно, какой результат я получу, и если случайно у меня один символ, я точно знаю, что изменить (строка формата. Так что, короче говоря, для меня это предпочтительнее для эмоциональные личные предпочтения, слабо поддерживаемые одной почти правдоподобной полупричиной ;-) Так что, тогда решено?
Developer63
13

Пытаться:

Key = i.ToString("000000");

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

Марк Гравелл
источник
7

Для интерполированных строк:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"
Алан Самет
источник
3

Здесь я хочу, чтобы мое no ограничивалось четырьмя цифрами, например, если оно равно 1, оно должно отображаться как 0001, если оно 11, оно должно отображаться как 0011. Ниже приведен код.

        reciptno=1;//Pass only integer.

        string formatted = string.Format("{0:0000}", reciptno);

        TxtRecNo.Text = formatted;//Output=0001..

Я реализовал этот код для генерации квитанции.

Шактипрасад Суэйн
источник
1
int num=1;
string number=num.ToString().PadLeft(4, '0')

Выход = "00001"

РЕДАКТИРОВАТЬ: Изменено, чтобы соответствовать сумме PadLeft

Гаян Чинтхака Дхармаратна
источник