nFmt.NumDigits = 0;
: 소수점 이하 자리수
nFmt.LeadingZero = 0;
: 0 => NumDigits 자리수에 0을 채우지 않음. 0 이외 값인 경우 0을 채움 (ex. 1.23 NumDigits이 3, LeadingZero가 0이면 1.23으로 표기. LeadingZero가 1이면 1.230으로 표기
nFmt.Grouping = 3;
: 그룹화 간격
nFmt.IpDecimalSep = _T(".");
: 소수점 구분자
nFmt.IpThousandSep = _T(",");
: 천 단위 구분자
nFmt.NegativeOrder = 1;
: 음수값 표현 방법 (부호가 숫자 앞에 오도록, 1 = default)
TCHAR szBuffer[64];
: 마지막 인덱스는 공백(NULL) < 컴퓨터 메모리 구조상 마지막을 알리기 위해
함수를 호출하여 숫자 값을 문자열로 포맷
- 첫 번째 인자 (NULL) : locale정보를 지정하지 않음 (시스템 기본 로캘 사용)
- 두 번째 인자 (NULL) : 포맷 스타일을 나타내는 로캘 정보 지정하지 않음
- 세 번째 인자 (decValue) : 포맷할 숫자 값
- 네 번째 인자 (&nFmt) : NUMBERFMT 구조체로 지정한 포맷팅 정보
- 다섯 번째 인자 (szBuffer) : 포맷된 결과를 저장할 문자열 버퍼
- 여섯 번째 인자 (sizeof(szBuffer)) : 문자열 버퍼의 크기를 바이트 단위로 지정
CString decValue;
decValue.Format(_T("%I64d"), decimalValue);
//NUMBERFMT 숫자 포맷팅에 사용되는 정보를 담는 구조체
NUMBERFMT nFmt = { 0, 0, 3, _T("."), _T(","), 1 };
TCHAR szBuffer[64];
// GetNumberFormat의 인자
// LOCALE_SYSTEM_DEFAULT, 플래그, 문자열 숫자, 문자열 포맷, 변환된 문자열 숫자, 버퍼 사이즈
::GetNumberFormat(NULL, NULL, decValue, &nFmt, szBuffer, sizeof(szBuffer));
decValue = szBuffer; // 문자열 갱신
m_str_DEC = decValue;