STRFMON - Linux手册页

时间:2019-08-20 18:01:24  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2020-06-09

名称

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()函数根据当前的语言环境和格式指定格式格式化指定的金额,并将结果放入最大大小为的字符数组s中。

strfmon_l()函数执行相同的任务,但使用语言环境指定的语言环境。如果locale是特殊的语言环境对象LC_GLOBAL_LOCALE(请参见duplocale(3))或不是有效的语言环境对象句柄,则strfmon_l()的行为是不确定的。

格式的普通字符无需转换即可复制到。转换说明符由aq%aq字符引入。紧随其后的可能是零个或多个以下标志:

=f
单字节字符f用作数字填充字符(以左精度使用,请参见下文)。如果未指定,则使用空格字符。
ha
不要使用可能为当前语言环境定义的任何分组字符。默认情况下,启用分组。
(or +
(标志表示在括号之间应包含负数。+标志表示应以默认方式处理符号,即,数量前应带有区域设置的符号指示,例如,对于正数,不作任何表示,对于正数,"-"表示负。
!
省略货币符号。
-
左对齐所有字段。默认值为右对齐。

接下来,可能会有一个字段宽度:一个十进制数字字符串,指定最小字段宽度(以字节为单位)。默认值为0。小于此宽度的结果用空格填充(在左边,除非给出了左对齐标志)。

接下来,可能会有"#"形式的左精度,后跟一个十进制数字字符串。如果基数字符的剩余位数小于此位数,则在左侧用数字填充字符填充表示形式。分组字符不计入该字段宽度。

接下来,可能存在形式""的正确精度。后面跟一个十进制数字字符串。格式化前将要格式化的数量四舍五入到指定的位数。默认值在当前语言环境的frac_digits和int_frac_digits项目中指定。如果正确的精度为0,则不打印基数字符。 (此处的基数字符由LC_MONETARY确定,可能与LC_NUMERIC指定的字符不同。)

最后,转换规范必须以转换字符结尾。这三个转换字符是

%
(在这种情况下,整个规范必须完全是" %%"。)在结果字符串中放入aq%aq字符。
i
类型double的一个参数使用语言环境的国际货币格式进行转换。
n
类型double的一个参数使用语言环境的本国货币格式进行转换。

返回值

strfmon()函数返回放置在数组s中的字符数(不包括终止空字节),前提是字符串(包括终止空字节)适合。否则,它将errno设置为E2BIG,返回-1,并且数组的内容未定义。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
strfmon()Thread safetyMT-Safe locale
strfmon_l()Thread safetyMT-Safe

遵循规范

POSIX.1-2001,POSIX.1-2008。

示例

通话

strfmon(buf, sizeof(buf), "[%ha=*#6n] [%=*#6i]",
        1234.567, 1234.567);

输出

[€ **1234,57] [EUR **1 234,57]

在nl_NL语言环境中。 de_DEde_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)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/