티스토리 뷰




C# 프로그램을 개발하다보면 계산 결과를 윈도우 폼의 레이블이나 편집창에 표시하거나 콘솔 모드에서 화면에 출력하는 것으로 기능 수행을 끝내게 되는 것이 보통입니다. C#에서는 변수명.ToString()으로 간단하게 문자열로 변환해서 출력할 수 있지만 소수점이나 폭맞춤등의 필요에 따라 사용자가 원하는 형식으로 변환해야만 하는 경우가 생기는데 이런 경우를 위한 형식 지정 방법을 다룹니다.

decimal value = 1234.567m;
Console.WriteLine("Default : " + value.ToString());
Console.WriteLine("Basic format : " + value.ToString("C2"));
Console.WriteLine("Multi format {0:C2}", value);

위의 코드를 수행한 결과는 아래의 화면과 같습니다.

숫자를 문자열로 변환하는 방법은 위의 예제와 같이 크게 3가지로 분류할 수 있습니다. 첫번째는 변환을 시스템에 맞기는 것으로 변수명.ToString()으로 간편하게 지정할 수 있지만 출력 폭이나 소수점 지정, 백단위 쉼표, 통화 표시등 사용자에 필요에 따른 변환을 할 수 없다는 단점이 있습니다. 두번째는 변수명.ToString()에 원하는 출력 형식을 지정하는 방식으로 여러 변수를 한번에 변환하거나 복합적으로 변환해야 하는 경우에는 적절치 않습니다. 세번째는 복합적인 변환 및 형식화에 사용하는 경우로 String.Format( 형식, 변수 리스트...)로 사용할 수 있습니다. 세번째 방법은 형식과 함께 해당하는 변수들을 함수 파라미터로 전달하는 C언어의 printf와 유사한 형태를 가지고 있지만 형식 지정 방법에는 차이가 있습니다. 마지막 예는 "Console.WriteLine(String.Format("Multi format {0:C2}", value));"로도 기술할 수 있습니다. 

복합 형식은 {}안에 파라미터의 인덱스:표시형식으로 기술합니다. 두번째 파라미터를 고정 소수점으로 출력하려면 "{1:F}"로 기술하면 됩니다. 전달된 변수에 대해서 형식을 지정하는 문자열에서는 여러번 지정할 수도 있고 서로 다른 형식으로 동일한 변수를 출력할 수도 있습니다. 아래의 예제를 보면 동일 파라미터에 대하여 서로 다른 형식으로 지정한 것과 그 결과를 확인할 수 있습니다.

Console.WriteLine("Multi format \nC:{0:C2}\nD:{2:D}\nE:{0:E}\nF:{0:F}\nG:{0:G}\nN:{0:N}\nP:{1:P}\nX:{2:X}", 
                value, value / 10000, Convert.ToInt32(value));


위의 예제를 보면 {}내부에 "숫자:"로 지정한 파라미터 인덱스(위치, 0부터 시작) 다음에 형식을 지정하는데 C, D, E, F, G, N, P, X등의 문자와바로 옆에 숫자를 확인할 수 있습니다. C~X까지의 문자를 형식 지정자라 하고 형식 지정자에 따라 시스템에 정의된 형태로 숫자를 변환해 줍니다. 형식지정자 옆의 숫자는 자리수를 지정하며 타입에 따라 소수점이나 전체 자리수를 의미합니다. C~X까지의 문자는 대문자로도 소문자로도 지정할 수 있으며 시스템에서 지정한 형식이 아닌 개발자 임의의 형식을 지정하고 싶을 경우에는 '0', '#' 등의 문자로 임의의 형식을 지정할 수도 있습니다. 아래는 C~X까지의 문자로 지정하는 시스템 기본 형식에 대한 간단한 설명입니다.

  • C : 통화 표시. 모든 숫자 타입 사용 가능. 숫자는 소수점 자리수를 의미
  • D : 정수 표시. 정수 타입에만 사용 가능. 숫자는 전체 자리수로 값보다 크면 왼쪽을 0으로 채움
  • E : 지수 표시. 모든 숫자 타입 사용 가능. 숫자는 소수점 자리수를 의미
  • F : 고정소수점 표시. 모든 숫자 타입 사용 가능. 숫자는 소수점 자리수를 의미
  • G : 일반적 숫자 표시. 모든 숫자 타입 사용 가능. 숫자는 유효자리수를 의미
  • N : 숫자 표시. 모든 숫자 타입 사용 가능. 숫자는 소수점 자리수를 의미 우측 소숫점을 0으로 채움
  • P : 퍼센트 표시. 모든 숫자 타입 사용 가능. 숫자는 소수점 자리수를 의미. 지정 값에 100을 곱한 퍼센트 표시
  • X : 16진수 표시. 정수 타입에만 사용 가능. 숫자는 전체 자리수로 값보다 크면 왼쪽을 0으로 채움


위에서 언급한 형식 지정 방법은 많이 사용하는 출력 형태에 대하여 형식 지정자와 자리수로 간편하게 형식을 취하는 방법이고 그외에 필요한 나름의 형식은 아래와 같이 '0', '#' 문자를 중심으로 임의의 형식을 만들 수 있습니다. 기본 형식과 자주 사용하는 형식은 아래와 같습니다.

  • 0 : 숫자를 의미하며 형식보다 실제 자리수가 작은 경우 해당 자리는 '0'으로 표시합니다.
  • # : 숫자를 의미하며 형식보다 실제 자리수가 작은 경우 해당 자리는 표시하지 않습니다.
  • '.'문자로 소수점을 표시하고 ','로 백단위 쉼표를 표시할 수 있습니다.
  • "\\{0:0,0.00}" : 소수 2자리를 콤마와 통화표시하여 출력
  • "{2:#,#}" : 소수점을 표시하자 않고 콤마 출력
  • "{1:##.0%}" : 두번째 파라미터를 소수점 1자리로 퍼센트 출력 (값에 곱하기 100해서 표시함)


숫자를 문자열로 변환하는 과정에서 정상적인 값이 전달되지 않으면 예외(Exception)가 발생하므로 주의해야 합니다. 예를 들어 정수만 수용하는 형식에 실수를 대입하면 예외가 발생합니다. 실행중 비슷한 가능성이 있다면 try catch로 걸러주셔야 합니다.



댓글
댓글쓰기 폼