선행 0을 사용하여 숫자를 문자열로 포맷하는 방법은 무엇입니까?


246

문자열로 변환 해야하는 숫자가 있습니다. 먼저 이것을 사용했습니다 :

Key = i.ToString();

그러나 나는 그것이 이상한 순서로 정렬되고 있음을 알고 있으므로 0으로 채워야합니다. 어떻게해야합니까?


답변:


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"은 선행 0을 나타냅니다. 가능한 한이 양을 늘릴 수 있습니다.
Dedan


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 ( "format", object)이 object.ToString ( "format")보다 선호됩니다. 따라서,

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

~보다 바람직하다

Key = i.ToString("000000");

4
예, @ cja가 요청한 것처럼 왜 바람직한가요? 그리고 나는 주장에 반대하는 것이 아니라 이유를 알고 싶습니다.
Christopher King

첫 번째 구문은보다 정확하고 예측 가능하며 명확합니다. Key = String.Format ( "{0 : 00000}", 15); 이는 Key = i.ToString ( "000000")과 비교됩니다. 첫 번째 구문을 사용하면 얻을 수있는 결과를 정확히 알 수 있으며, bychance가 하나의 문자를 벗어나면 정확히 무엇을 변경 해야하는지 알고 있습니다 (형식 문자열). 감정적 인 개인적인 취향, 거의 그럴듯한 반 이유로 약하게 뒷받침됩니다 ;-) 그렇다면 결정 되었습니까?
Developer63

13

시험:

Key = i.ToString("000000");

그러나 개인적으로 문자열 표현 대신 정수를 직접 정렬 할 수 없는지 알 수 있습니다.


7

보간 된 문자열의 경우 :

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

3

여기에 1이 있으면 0001로 표시되고 11은 0011로 표시되어야하는 것처럼 4 자리로 제한하지 않기를 원합니다. 아래 코드는 다음과 같습니다.

        reciptno=1;//Pass only integer.

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

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

송금 번호를 생성하기 위해이 코드를 구현했습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.