【C标准库】通过locale.h设置美元的格式

本文详细介绍了C语言中的locale.h头文件,它主要用于处理不同地区的日期、时间、货币格式等本地化信息。文章讲解了setlocale函数如何设置和获取本地化信息,以及localeconv函数如何描述货币表示方法。同时,解释了lconv结构体中的各项字段,如货币符号、小数点、千位分隔符等,并展示了货币符号和正负号的布局规则。
摘要由CSDN通过智能技术生成

本文已整合到C语言标准库深度解读

locale.h

locale.h主要对时间和货币的书写格式进行了封装,从而符合不同地区的使用习惯。故而locale.h中设计了两个用于本地化的函数

char *setlocale(int category, const char *locale)
struct lconv *localeconv(void)

前者用于设置或读取本地化信息,locale即代表某个区域的字符串,category代表将要设置的函数类别,其输入参数包括

说明影响的函数
0LC_ALL下面的所有选项
1LC_COLLATE字符串比较strcoll 和 strxfrm
2LC_CTYPE字符分类和转换所有字符函数
3LC_MONETARY货币格式localeconv()
4LC_NUMERIC小数点分隔符localeconv()
5LC_TIME日期和时间格式strftime()
6LC_MESSAGES系统响应

localeconv函数

localeconv()函数被封装在locale.h中,其返回值是一个lconv结构,主要用于描述货币的表示方法,每个字段的含义在下面的注释中说明。在注释中,cs表示当前区域的货币符号。

typedef struct {
   char *decimal_point;     //常规数值的小数点字符
   char *thousands_sep;     //常规数值的千位分隔符
   char *grouping;          //常规数值中每组数字大小的字符串
   char *int_curr_symbol;   //国际货币符号使用的字符串。前三个字符由 ISO 4217:1987 指定,第四个字符用于分隔货币符号和货币量。
   char *currency_symbol;   //当前区域的货币符号,后文用cs表示
   char *mon_decimal_point; //货币的小数点字符
   char *mon_thousands_sep; //货币的千位分隔符
   char *mon_grouping;      //货币数值中每组数字大小的字符串
   char *positive_sign;     //货币的正号
   char *negative_sign;     //货币的负号
   char int_frac_digits;    //国际货币值中小数点后要显示的位数
   char frac_digits;        //货币值中小数点后要显示的位数。
   char p_cs_precedes;      //cs在正货币值中的位置
   char p_sep_by_space;     //cs与正货币值之间是否使用空格
   char n_cs_precedes;      //cs在负货币值中的位置
   char n_sep_by_space;     //cs与负货币值之间是否使用空格
   char p_sign_posn;        //表示正货币值中正号的位置
   char n_sign_posn;        //表示负货币值中负号的位置
} lconv

其中,groupingmon_grouping均为字符串,分别表示在常规数值和货币中每组数字大小。字符串中每个字符都代表一个整数,用以指定当前组的位数。

当前区域的货币符号cs与货币值之间的排版方式为

值为1值为0
p_cs_precedescs在正货币值之前cs在正货币值之后
p_sep_by_spacecs和正货币值之间用空格cs和正货币值之间不使用空格
n_cs_precedescs在负货币值之前cs在负货币值之后。
n_sep_by_spacecs和负货币值之间使用空格cs和负货币值之间不使用空格

货币中正负号的位置通过p_sign_posnn_sign_posn来调节,二者均有5个取值。

对于-1美元,其cs的符号设为$,当其n_sign_posn取值从0-5,n_cs_precedes分别为0,1时,表示方法分别如下

01234
0(1.00$)-1.00$1.00$-1.00-$1.00$-
1($1.00)-$1.00$1.00--$1.00$-1.00
说明括号数值和cs之前数值和cs之后cs之前cs之后
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值