STRFMON(3)

НАЗВАНИЕ
strfmon - преобразует денежное значение в строку

СИНТАКСИС
#include <monetary.h>

ssize_t strfmon(char *s, size_t max, const char *format,
...);

ОПИСАНИЕ
Функция strfmon() форматирует определенные суммы соответственно определенному формату format и помещает результат в символьный массив s размера max.

Обычные символы заданные в аргументе format копируются в s без преобразования. Спецификаторы преобразования начинаются с символа `%'. Непосредственно за ними могут следовать ноль или более флагов:

=f  Символ f используется в качестве символа-заполнителя (для выравнивания слева, см. ниже). Когда символ не определен, используется символ пробела.

^   Не использовать никакие групповые символы, которые могут быть определены в текущей локали. По умолчанию, разделение на группы разрядов разрешено.

( или +
    Флаг ( указывает на то, что отрицательные суммы должны быть заключены в скобки. Флаг + указывает на то, что сумма должна быть со знаком, это зависит от локали, например, может быть так, что в результате ничего не будет для положительных сумм и "-" для отрицательных.

!   Опускать символ валюты.

-   Выравнивание по левому краю для всех полей. По умолчанию, выравнивание по правому краю.

Далее может быть указана ширина поля: десятичное число, определяющее минимальную ширину поля в байтах. По умолчанию - 0. Если результат меньше чем ширина, то он дополняется пробелами (слева, если установлен флаг выравнивания по левому краю).

Далее может быть указана ширина целой части суммы: символ "#" за которым следует десятичное число. Если в сумме меньше цифр, чем задано, тогда сумма дополняется слева символом-заполнителем. Групповые символы не учитываются при подсчете ширины поля.

Далее может быть указана точность десятичной части: символ "." за которым следует десятичное число. Сумма будет округлена до определенного числа знаков. По умолчанию, это определено в элементах frac_digits и int_frac_digits текущей локали. Если десятичная точность равна 0, то разделитель целой и дробной части не печатается. (Символ-разделитель определяется переменной LC_MONETARY и может отличаться от символа определенного в переменной LC_NUMERIC.)

И наконец, определение преобразования может заканчиваться символом преобразования. Существует три символа преобразования:

%   (Если в строку необходимо включить этот символ, то необходимо его удвоить "%%".) Помещает символ `%' в строку-результат.

i   Аргумент вещественного типа преобразуется с использованием локального интернационального формата валюты.

n   Аргумент вещественного типа преобразуется с использованием локального национального формата валюты.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция strfmon() возвращает количество символов, помещенных в массив s, не включая символ окончания строки NUL, который заканчивает строку. Иначе она устанавливает errno в значение E2BIG, возвращает -1, а содержимое массива неопределено.

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
Вызов
    strfmon(buf, sizeof(buf), "[%^=*#6n] [%=*#6i]",
            1234.567, 1234.567);
выведет
    [ fl **1234,57] [ NLG **1 234,57]
в голландской локали (с fl для флоринов (florijnen) и NLG для нидерландских гульденов). Групповой символ может выглядеть очень некрасиво. Неожиданно, что "fl" стоит впереди и за ним следует пробел, а "NLG" стоит впереди и за ним следует два пробела. Это может быть ошибка в файлах локали. Примеры для итальянской, австралийской, швейцарской и португальской локалей
    [ L. **1235] [ ITL **1.235]
    [ $**1234.57] [ AUD **1,234.57]
    [Fr. **1234,57] [CHF **1.234,57]
    [ **1234$57Esc] [ **1.234$57PTE ]

СМ. ТАКЖЕ
setlocale(3), sprintf(3), locale(7)