C++ GetNumberFormat 함수

당근한박스·2023년 8월 28일
0

C++

목록 보기
4/23

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) < 컴퓨터 메모리 구조상 마지막을 알리기 위해

GetNumberFormat 함수

함수를 호출하여 숫자 값을 문자열로 포맷
- 첫 번째 인자 (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;

0개의 댓글