strfmon - преобразует денежное значение в строку
strfmon(3)
преобразует денежное значение в строку
Other Alias
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 без
преобразования. Определители преобразования начинаются с символа
'%'. Непосредственно за ними может следовать ноль или более флагов:
=f
Однобайтовый символ f используется в качестве числового
символа-заполнителя (для выравнивания слева, смотрите ниже). Если символ не
указан, то используется символ пробела.
^
Не использовать группирующие символы, которые могут быть определены в
текущей локали. По умолчанию, разделение на группы разрядов разрешено.
( или +
Флаг ( указывает на то, что отрицательные суммы должны быть заключены в
скобки. Флаг + указывает на то, что наличие знака у суммы должно
обрабатываться стандартным способом, то есть зависит от локали, например
может быть так, что в результате ничего не указывается для положительных
сумм и «-» для отрицательных.
!
Пропустить текущий символ.
-
Выровнять все поля по левому краю. По умолчанию выравнивание по правому
краю.
Далее может быть указана ширина поля: строка с десятичным числом,
определяющая минимальную ширину поля в байтах. По умолчанию 0. Если
результат меньше чем эта ширина, то он дополняется пробелами (слева, если
установлен флаг выравнивания по левому краю).
Далее может быть указана ширина целой части числа: символ «#», за которым
следует строка с десятичным числом. Если количество цифр слева от символа
разделителя меньше, чем ширина целой части, то предоставление дополняется
слева числовым символом-заполнителем. Группирующие символы не учитываются
при подсчете этой ширины поля.
Далее может быть указана точность десятичной части: символ «.», за которым
следует строка с десятичным числом. Перед форматированием сумма будет
округлена до указанного числа знаков. По умолчанию, точность задаётся в
элементах frac_digits и int_frac_digits текущей локали. Если
десятичная точность равна 0, то разделитель целой и дробной части не
печатается (символ-разделитель определяется переменной LC_MONETARY и
может отличаться от символа определенного в переменной LC_NUMERIC).
И, наконец, определение преобразования может заканчиваться символом
преобразования. Существует три символа преобразования:
%
(Если в строку необходимо включить этот символ, то он задаётся как «%%».)
Помещает символ '%' в строку-результат.
i
Аргумент типа double преобразуется с использованием локального
интернационального формата валюты.
n
Аргумент типа double преобразуется с использованием локального
национального формата валюты.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении функция
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]