본문으로 바로가기

MFC CString::Format 문은 다양한 표현을 제공한다.

그런데 통화단위  또는 화폐단위를 표현하는 방법은 좀 낯설다.


1000000 을 1,000,000 과 같이 통화 단위로 가격을 표시 하고 싶을 땐 어떻게 처리해야 할까?

문자열 길이를 계산해서 자릿수 계산해서 화폐단위로 ","를 찍어야 할까 고민도 해봤는데.. 어렵다기 보다 귀찮다!!


화폐단위 또는 통화 단위로 금액을 표시하는 방법은 단순하지만 귀찮은 부분이 있다.

단순히 뒤에서 부터 세자리씩 끊어서 ","를 삽임하는 방법도 있지만

",120,000" 같은 현상이 발생하지 않게 문자열 길이도 계산 해 주어야 한다. 

 

그러나 의외로 쉽게 처리하는 방법이 있다.

GetCurrencyFormat 이라는 함수다.

엑세의 Won()같은 기능을 한다 보면 된다


CURRENCYFMT CurFormat;

memset(&CurFormat,0,sizeof(CURRENCYFMT));

CurFormat.NumDigits = 3 ; ///솟수 점 자리 표기

CurFormat.LeadingZero=0; //시작 점

CurFormat.Grouping=2; //문자 분리 하여 단위 그룹으로 구분자 지정

CurFormat.lpDecimalSep="."; //숫수점 표시 문자

CurFormat.lpThousandSep=","; //그룹을 구분할 문자

CurFormat.NegativeOrder=8;

CurFormat.PositiveOrder=2; //단위 표시 방법 0=왼쪽 붙이기 2= 왼쪽 띄우기 1=오른쪽 분이기 3=우측 띄우기 NegativeOrder 와도 연관,기타는 무시

CurFormat.lpCurrencySymbol="K";//단위 표기 심벌

 

실행 방법

char g_szTemp[256];

int MAX_STR=256;

memset(g_szTemp,0,256);

GetCurrencyFormat(LOCALE_USER_DEFAULT, // a predefined value for // user locale

0, // operation option

TEXT("0123567.4010"), // input number (see MSDN for legal chars)

&CurFormat, // formatting specifications

g_szTemp, // output buffer

MAX_STR); // size of output buffer

 

 

Out: ->12,35,67.401 K

 

속성을 변경해서 출력 해보변

CURRENCYFMT CurFormat;

memset(&CurFormat,0,sizeof(CURRENCYFMT));

CurFormat.NumDigits = 0 ; ///솟수 점 자리 표기

CurFormat.LeadingZero=0; //시작 점

CurFormat.Grouping=3; //문자 분리 하여 단위 그룹으로 구분자 지정

CurFormat.lpDecimalSep="."; //숫수점 표시 문자

CurFormat.lpThousandSep=","; //그룹을 구분할 문자

CurFormat.NegativeOrder=8;

CurFormat.PositiveOrder=3; //단위 표시 방법 0=왼쪽 붙이기 2= 왼쪽 띄우기 1=오른쪽 분이기 3=우측 띄우기 NegativeOrder 와도 연관,기타는 무시

CurFormat.lpCurrencySymbol="K";//단위 표기 심벌

 

Out: ->123,567 K