STRFMON - Linux手册页
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)。
Interface | Attribute | Value |
strfmon() | Thread safety | MT-Safe locale |
strfmon_l() | Thread safety | MT-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_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]
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。