| |||
| Home > C 및 C++ 라이브러리 > 로케일 및 CTYPE 조정 > _get_lc_numeric() | |||
_get_lc_numeric()은 __lc_numeric_blk 구조에
대한 포인터를 반환해야 합니다.
Example 5.7의 매크로를 사용하여 구조를
만드십시오.
Example 5.7. LC_NUMERIC_DEF
__LC_NUMERIC_DEF(lcnumeric_c, "C",".","","")
__LC_NUMERIC_DEF(lcnumeric_iso8859_1, "ISO8859-1",
".", ",", "\3")
__LC_NUMERIC_DEF(lcnumeric_fr, "fr", ",", ".", "\3")
__LC_INDEX_END(lcnumeric_dummy)
void const *_get_lc_numeric(void const *null, char const *name) {
return _findlocale(&lcnumeric_c_index, name);
}
void test_lc_numeric(void) {
double pi = 4*atan(1.);
char buf[20];
/* Test changing decimal point as we shift in and out of French
* numeric locale. */
EQS(setlocale(LC_NUMERIC, NULL), "C"); /* verify starting point */
snprintf(buf, sizeof(buf), "%g", pi); EQS(buf, "3.14159");
EQI(!setlocale(LC_NUMERIC, "ISO8859-1"), 0); /* setlocale should work */
EQS(setlocale(LC_NUMERIC, NULL), "ISO8859-1");
snprintf(buf, sizeof(buf), "%g", pi); EQS(buf, "3.14159");
EQI(!setlocale(LC_NUMERIC, "fr"), 0); /* setlocale should work */
EQS(setlocale(LC_NUMERIC, NULL), "fr");
snprintf(buf, sizeof(buf), "%g", pi); EQS(buf, "3,14159");
EQI(!setlocale(LC_NUMERIC, "C"), 0); /* setlocale should work */
EQS(setlocale(LC_NUMERIC, NULL), "C");
snprintf(buf, sizeof(buf), "%g", pi); EQS(buf, "3.14159");
}
오프셋 필드는 __lc_monetary_blk와 유사하게 해석됩니다.