使用FreeBSD在C中格式化千位分隔符



如何使用FreeBSD在C中格式化千位分隔符?我从这里的一个答案中获得代码。我如何在C中用逗号格式化货币?它可以在我的Ubuntu Linux系统中工作,但不能在我的FreeBSD 11.4和14-CURRENT系统中工作。

#include <stdio.h>
#include <locale.h>
int main(void)
{
setlocale(LC_NUMERIC, "");
printf("$%'.2Lfn", 123456789.00L);
printf("$%'.2Lfn", 1234.56L);
printf("$%'.2Lfn", 123.45L);
return 0;
}

printf手册页(3(说:

`''(撇号(十进制转换(d、u或i(或整数浮点转换的一部分(f或f(应分组,并且使用返回的非货币分隔符以千分隔localeconv(3(。

因此,它使用区域设置分隔符。

你可以这样做:

#include <stdio.h>
#include <locale.h>
int main(void)
{
const char sep = ''';
setlocale(LC_NUMERIC, ""); 
localeconv()->thousands_sep[0] = sep;
printf("$%'04.2Lfn", 123456789.00L);
printf("$%'04.2Lfn", 1234.56L);
printf("$%'04.2Lfn", 123.45L);
return 0;
}

然后像这样编译:

cc -o myprog myprog.c

将输出:

./myprog
$123'456'789.00
$1'234.56
$123.45

刚刚发现,通过在setlocale((中指定此参数en_US.UTF-8,还将在C中为FreeBSD提供千分隔符。

#include <stdio.h>
#include <locale.h>
int main(void)
{
setlocale(LC_NUMERIC, "en_US.UTF-8");
printf("$%'.2Lfn", 123456789.00L);
printf("$%'.2Lfn", 1234.56L);
printf("$%'.2Lfn", 123.45L);
return 0;
}

相关内容

  • 没有找到相关文章

最新更新