[C#] 숫자 포맷 (돈 표시 및 소수점 이하 표시)


Development note/C#  2019. 8. 5. 23:10

안녕하세요. 명월입니다.


이 글은 C#에서 숫자 포맷 (돈 표시 및 소수점 이하 표시)에 대한 글입니다.


우리가 프로그램 상에서 수를 다루면 보통 int나 double, decimal를 통해서 수를 다룹니다. 특히 프로그램에서 수를 다룬다고 하면 가장 많은 수계산이 아마도 돈과 관계된 수이지 않을까 싶습니다.

그런데 그 수를 표현할 때 단순히 수만 표현하게 되면 보기에도 읽기 힘들고 억, 조 단위로 넘어가게 되면 잘못된 독해로 수를 오해할 수 있습니다.


수를 오해한다는 건 계산된 값은 100만원인데 콤마 없이 1000000원 찍힐 경우 한눈에 100만을 알아보기 힘들 뿐더러 천만원으로 오해할 수 있다는 뜻입니다.

억의 경우는 100000000 으로 표시되네요..


그래서 우리는 흔히 콤마를 표시해서 수를 구분합니다.

namespace Example
{
  static class Program
  {
    static void Main(string[] args)
    {
      // Decimal 타입에 1억의 데이터를 넣었다.
      Decimal data = 100000000;
      // 0가 3단위 당 콤마를 넣어서 돈 표시하였다.
      Console.WriteLine(data.ToString("#,##0"));

      Console.WriteLine("Press any key...");
      Console.ReadKey();
    }
  }
}

위 예제를 보면 데이터는 일억의 데이터를 넣고 출력은 ToString에 #,##0의 파라미터를 넣어서 돈을 표시했습니다.

엑세를 잘 다루는 사람이라면 아실지도 모르겠지만 데이터 표현하는데 #과 0가 있습니다.

이 차이는 0의 경우는 데이터가 자릿 수에서 해당 자리수 보다 작아도 0을 표시하는 것이고 #의 경우는 표시하지 않는 것입니다.


즉, 0,000으로 표시하면 1의 경우가 다음과 같은 결과가 나옵니다.

그 외의 표현 방법은 아래의 예제로 소개하겠습니다.

static class Program
{
  static void Main(string[] args)
  {
    // 16 진수 변환
    Console.WriteLine(String.Format("{0:X}", 10));
    
    // 소수점 2자리까지 표시(소수점 이하 2자리까지 값이 없으면 0으로 표시)
    Console.WriteLine(String.Format("{0:0.00}", 10.1d));
    Console.WriteLine(String.Format("{0:0.00}", 10.111111111111d));

    // 소수점 2자리까지 표시
    Console.WriteLine(String.Format("{0:0.##}", 10.1d));
    Console.WriteLine(String.Format("{0:0.##}", 10.1111111111111111111d));

    // 콤마를 이용해서 자릿 수 표시. 총 10자리수를 기준으로 앞에 공백를 나둔다.
    Console.WriteLine(String.Format("{0,10:#,##0}",11));
    Console.WriteLine(String.Format("{0,10:#,##0}", 1122));

    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}

그 외에 숫자 데이터 타입의 ToString 혹슨 String.format을 이용하는 방법이 가장 많이 사용되고 편하지만 CultureInfo 클래스로 표현하는 방법도 있습니다.

이는 시스템에 따라 프로그램 현지화를 위해 사용되는 방법입니다.

static class Program
{
  static void Main(string[] args)
  {
    Decimal data = 100000000;
    NumberFormatInfo format =  new CultureInfo("ko-KR", false).NumberFormat;
    // 돈표시를 하려면 "c"를 그냥 콤마만 표현하려면 n를 넣습니다.
    Console.WriteLine(data.ToString("n",format));

    // 시스템에서 설정하는 숫자 포맷
    format = CultureInfo.CurrentCulture.NumberFormat;
    Console.WriteLine(data.ToString("c", format));

    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}

여기까지 C#에서 숫자 포맷 (돈 표시 및 소수점 이하 표시)에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.