STRFMON(3) | Руководство программиста Linux | STRFMON(3) |
strfmon, strfmon_l - преобразует денежное значение в строку
#include <monetary.h>
ssize_t strfmon(char *s, size_t max, const char *format, ...);
ssize_t strfmon_l(char *s, size_t max, locale_t locale, const char *" format , ...);
Функция strfmon() преобразует заданные денежные суммы в соответствии с текущей локалью и указанным форматом format и помещает результат в символьный массив s размера max.
Функция strfmon_l() производит то же действие, но используется локаль, заданная в locale. Поведение strfmon_l() не определёно, если значение locale равно специальному объекту локали LC_GLOBAL_LOCALE (смотрите duplocale(3)) или описатель объекта локали не корректен.
Обычные символы, заданные в аргументе format, копируются в s без преобразования. Определители преобразования начинаются с символа '%'. Непосредственно за ними может следовать ноль или более флагов:
Далее может быть указана ширина поля: строка с десятичным числом, определяющая минимальную ширину поля в байтах. По умолчанию 0. Если результат меньше чем эта ширина, то он дополняется пробелами (слева, если установлен флаг выравнивания по левому краю).
Далее может быть указана ширина целой части числа: символ «#», за которым следует строка с десятичным числом. Если количество цифр слева от символа разделителя меньше, чем ширина целой части, то предоставление дополняется слева числовым символом-заполнителем. Группирующие символы не учитываются при подсчете этой ширины поля.
Далее может быть указана точность десятичной части: символ «.», за которым следует строка с десятичным числом. Перед форматированием сумма будет округлена до указанного числа знаков. По умолчанию, точность задаётся в элементах frac_digits и int_frac_digits текущей локали. Если десятичная точность равна 0, то разделитель целой и дробной части не печатается (символ-разделитель определяется переменной LC_MONETARY и может отличаться от символа определенного в переменной LC_NUMERIC).
И, наконец, определение преобразования может заканчиваться символом преобразования. Существует три символа преобразования:
При успешном выполнении функция strfmon() возвращает количество символов, помещённых в массив s, без учёта конечного байта null, предоставляя строку, включающую конечный байт null. Иначе она устанавливает errno в значение E2BIG, возвращает -1, а содержимое массива не определено.
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
strfmon() | Безвредность в нитях | MT-Safe locale |
strfmon_l() | Безвредность в нитях | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Вызов
strfmon(buf, sizeof(buf), "[%^=*#6n] [%=*#6i]", 1234.567, 1234.567);
результат
[€ **1234,57] [EUR **1 234,57]
с локалью nl_NL. С локалями de_DE, de_CH, en_AU и en_GB:
[ **1234,57 €] [ **1.234,57 EUR] [ Fr. **1234.57] [ CHF **1'234.57] [ $**1234.57] [ AUD**1,234.57] [ £**1234.57] [ GBP**1,234.57]
2017-09-15 | Linux |