Jak sformatować liczbę na ciąg z zerami wiodącymi?

Odpowiedzi:

344

Raczej prosty:

Key = i.ToString("D2");

Doznacza „liczbę dziesiętną”, 2czyli liczbę cyfr do wydrukowania.

Mario
źródło
7
jeśli użyjesz string.Format("D2", value), otrzymasz D2wynik. to nie działa. "{0:00}"W tym przypadku musimy użyć .
v.oddou
42
Zamiast tego powinieneś użyć string.Format("{0:D2}", value). Samo powiedzenie string.Format("D2", ...)niczego nie zastąpi bez względu na wszystko, ponieważ nie masz symbolu zastępczego.
infinitypanda,
5
@infinitypanda zdaje sobie sprawę, że to zadziała tylko wtedy, gdy valuejest int. valueNa przykład, jeśli jest podwójny, będzie musiał byćstring.Format("{0:00}", value)
derekantrican
jeśli mówimy o „wiodących cyfrach”, myślę, że odpowiedzią byłoby i.ToString („00”); gdzie „00” oznacza zera wiodące .. możesz zwiększyć tę kwotę tak bardzo, jak to możliwe.
Dedan
198

Zobacz Formatowanie ciągów w C # dla niektórych przykładowych zastosowań String.Format

Właściwie lepszy przykład formatowania int

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

lub użyj interpolacji ciągów :

$"{15:00000}";                           // "00015"
Paweł
źródło
2
Zauważ, że String.Format („{0: 00000}”, „15”); zwraca „15”, tzn. nie działa na łańcuchu.
Paul McCarthy
72

Jeśli chcesz zachować stałą szerokość, na przykład 10 cyfr, zrób to w ten sposób

Key = i.ToString("0000000000");

Zastąp tyle cyfr, ile chcesz.

i = 123spowoduje następnie Key = "0000000123".

Øyvind Bråthen
źródło
63

Ponieważ nikt jeszcze o tym nie wspominał, jeśli używasz C # w wersji 6 lub nowszej (tj. Visual Studio 2015), możesz użyć interpolacji ciągów w celu uproszczenia kodu. Zamiast używać string.Format(...), możesz po prostu to zrobić:

Key = $"{i:D2}";
DavidG
źródło
33

posługiwać się:

i.ToString("D10")

Zobacz Int32.ToString (MSDN) i Standardowe ciągi formatu liczbowego (MSDN).

Lub użyj String.PadLeft. Na przykład,

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

Spowodowałoby to 0000000321. Chociaż String.PadLeftnie działałoby dla liczb ujemnych.

Zobacz String.PadLeft (MSDN).

firefox1986
źródło
4
Myślę, że to spieprzy cię, gdy spróbujesz użyć go z liczbami ujemnymi.
Mario
Dzięki - skorzystałem z drugiego. Pominąłem „.ToString ()” - nadal działa.
Sunsetquest,
14

Zwykle String.Format („format”, obiekt) jest lepszy niż obiekt.ToString („format”). W związku z tym,

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

jest lepszy niż

Key = i.ToString("000000");
Chameera Dedduwage
źródło
4
Tak, jak pytała @cja, dlaczego jest to lepsze? I nie sprzeciwiam się temu twierdzeniu, chciałbym wiedzieć, dlaczego.
Christopher King
Pierwsza składnia „wydaje się” bardziej precyzyjna, przewidywalna i przejrzysta. I lepiej byłoby podać jako Key = String.Format ("{0: 00000}", 15); to jest porównywane z Key = i.ToString („000000”); Przy pierwszej składni jestem pewien, że znam dokładnie wynik, który otrzymam, a jeśli bychance jestem jednym znakiem, wiem dokładnie, co zmienić (format ciągu. Krótko mówiąc, dla mnie lepiej jest emocjonalne preferencje osobiste, słabo wspierane przez jeden prawie prawdopodobny półpowód ;-) Więc to jest postanowione?
Developer63
13

Próbować:

Key = i.ToString("000000");

Osobiście jednak sprawdziłbym, czy nie można posortować liczb całkowitych bezpośrednio zamiast reprezentacji ciągu.

Marc Gravell
źródło
7

W przypadku interpolowanych ciągów:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"
Alan Samet
źródło
3

Tutaj chcę, aby moje ograniczenie nie było czterocyfrowe, np. Jeśli to 1, powinno być pokazane jako 0001, jeśli to 11, powinno być pokazane jako 0011 .. Poniżej znajduje się kod.

        reciptno=1;//Pass only integer.

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

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

Zaimplementowałem ten kod, aby wygenerować nr paragonu.

saktiprasad swain
źródło
1
int num=1;
string number=num.ToString().PadLeft(4, '0')

Wyjście = „00001”

EDYCJA: Zmieniono, aby pasowała do kwoty PadLeft

Gayan Chinthaka Dharmarathna
źródło