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


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}";

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).


4
Я предполагаю, что это вас обидит, если вы попытаетесь использовать его с отрицательными числами.
Mario

Спасибо - я использовал второй. Я пропустил ".ToString ()" - он все еще работает.
Sunsetquest

14

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

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

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

Key = i.ToString("000000");

4
Да, как @cja спросил, почему это предпочтительнее? И я не спорю с утверждением, хотелось бы знать почему.
Кристофер Кинг

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

13

Пытаться:

Key = i.ToString("000000");

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



3

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

        reciptno=1;//Pass only integer.

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

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.