Як я можу відформатувати число в рядку з провідними нулями?


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 розуміють, що це буде працювати лише тоді, коли valueце int. Якщо value, наприклад, подвійний, це доведеться бутиstring.Format("{0:00}", value)
derekantrican

якщо ми говоримо про "провідні цифри", я думаю, що відповідь буде i.ToString ("00"); де "00" являє собою провідні нулі. Ви можете збільшити цю суму якнайбільше.
Дедан

198

Див. Формат String у форматі C # для деяких прикладів використання String.Format

Насправді кращий приклад форматування int

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

або використовувати String Interpolation :

$"{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 Mario

Спасибі - я використала другу. Я залишив ".ToString ()" - він все ще працює.
Захід сонця

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

Тут я хочу, щоб моє значення не обмежувалося чотиризначним, як якщо б воно було 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.