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.


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


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


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

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


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

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.


7

W przypadku interpolowanych ciągów:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"

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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.