strfmon(3)

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

БИБЛИОТЕКА
Стандартная библиотека языка C (libc, -lc)

ОБЗОР
#include <monetary.h>

ssize_t strfmon(size_t size;
                char s[restrict size], size_t size,
                const char *restrict format, ...);
ssize_t strfmon_l(size_t size;
                char s[restrict size], size_t size, locale_t l,
                const char *restrict format, ...);

ОПИСАНИЕ
The strfmon() function formats the specified monetary amount according to the current locale and format specification format and places the result in the character array s of size bytes.

The strfmon_l() function performs the same task, but uses the locale specified by l. The behavior of strfmon_l() is undefined if l is the special locale object LC_GLOBAL_LOCALE (see duplocale(3)) or is not a valid locale object handle.

Ordinary characters in format are copied to s without conversion. Conversion specifiers are introduced by a '%' character. Immediately following it there can be zero or more of the following flags:

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

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

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

!   Пропустить текущий символ.

-   Выровнять все поля по левому краю. По умолчанию выравнивание по правому краю.

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

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

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

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

%   (In this case, the entire specification must be exactly "%%".) Put a '%' character in the result string.

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

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

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

АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение
strfmon() | Безвредность в нитях | MT-Safe locale
strfmon_l() | Безвредность в нитях | MT-Safe

СТАНДАРТЫ
POSIX.1-2008.

ИСТОРИЯ
POSIX.1-2001.

ПРИМЕРЫ
Вызов

    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]

СМОТРИТЕ ТАКЖЕ
duplocale(3), setlocale(3), sprintf(3), locale(7)

ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).