2 Строка знака после количества и int_curr_symbol.
3 Строка знака непосредственно до int_curr_symbol.
4 Строка знака непосредственно после int_curr_symbol. */
char int_p_sign_posn;
char int_n_sign_posn;
};
Комментарии показывают довольно ясно, что происходит. Давайте
посмотрим на несколько первых полей
struct lconv
:
decimal_point
Используемый символ разделителя десятичной дроби. В Соединенных Штатах и других англоязычных странах это точка, но во многих странах используется запятая.
thousands_sep
Символ, используемый для разделения каждых 3 цифр значения.
grouping
Массив однобайтных целых значений. Каждый элемент указывает, сколько цифр в группе. Как сказано в комментарии,
CHAR_MAX
означает, что дальше группировка не используется, а 0 означает повторное использование последнего элемента (Далее в главе мы покажем пример кода.)
int_curr_symbol
Это международный символ для местной валюты. Например, 'USD' для доллара США.
currency_symbol
Локальный символ для местной валюты. Например, $ для доллара США.
mon_decimal_point
,
mon_thousands_sep
,
mon_grouping
Соответствуют предыдущим полям, предоставляя те же сведения, но для денежных сумм.
Большая часть оставшихся значений не имеет значения для повседневного программирования. Следующая программа,
ch13-lconv.c
, выводит некоторые из этих значений, чтобы дать вам представление, для какого рода сведений они используются:
/* ch13-lconv.c --- показывает некоторые компоненты struct lconv */
при запуске в различных локалях мы получаем различные результаты.
$ LC_ALL=en_US ch13-lconv /* Результаты для Соединенных Штатов */
decimal_point = [.]
thousands_sep = [,]
grouping[0] = [3]
grouping[1] = [3]
int_curr_symbol = [USD ]
currency_symbol = [$]
mon_decimal_point = [.]
mon_thousands_sep = [,]
positive_sign = []
negative_sign = [-]
$ LC_ALL=it_IT ch13-lconv /* Результаты для Италии */
decimal_point = [.]
thousands_sep = []
int_curr_symbol = []
currency_symbol = []
mon_decimal_point = []
mon_thousands_sep = []
positive_sign = []
negative_sign = []
Обратите внимание, что значение
int_curr_symbol
в локали "
en_US
" включает завершающий символ пробела, который служит для отделения символа от последующего денежного значения.
13.2.5. Высокоуровневое числовое и денежное форматирование:
strfmon
и
printf
После рассмотрения всех полей
struct lconv
вы можете поинтересоваться: «Нужно ли мне на самом деле выяснять, как использовать все эти сведения, просто для форматирования денежного значения?» К счастью, ответом является «нет». [140] Функция