本文介绍了为C printf设置千位分隔符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这个C代码:
locale_t myLocale = newlocale(LC_NUMERIC_MASK, "en_US", (locale_t) 0);
uselocale(myLocale);
ptrLocale = localeconv();
ptrLocale->thousands_sep = (char *) "'";
int i1 = snprintf( s1, sizeof(s1), "%'d", 123456789);
s1
中的输出为123,456,789
。即使我将->thousands_sep
设置为'
,它也会被忽略。是否可以将任何字符设置为千位分隔符?linux
这里有一个非常简单的解决方案,可以在每个推荐答案发行版上运行,并且不需要(我的第一个回答)glibc
黑客:
按照instructions的建议使用单独的生成目录生成glibc
版本后,必须在源glibc
目录--而不是生成目录中的glibc
目录中执行所有这些步骤。
我的新locale
文件名为en_AT
。
- 从现有文件
en_US
在localedata/locales/
目录中创建新文件en_AT
。 - 将
thousands_sep
的所有条目更改为thousands_sep "<U0027>"
或要用作千位分隔符的任何字符。 - 将新文件内出现的所有
en_US
更改为en_AT
。 - 向文件
localedata/SUPPORTED
添加行:en_AT.UTF-8/UTF-8
。 - 在Build目录
make localedata/install-locales
中运行。 - 然后,新的
locale
将自动添加到系统中,并且程序可以立即访问。
在C/C++程序中,您可以使用:
切换到新的千位分隔符将其与产生此输出的printf( "%'d", 1000000 );
一起使用
备注:当您在程序中需要在运行时确定的不同本地化时,您可以从加载所请求的locale
的man
页面使用此example,只需替换en_AT
中的LC_NUMERIC
设置。
这篇关于为C printf设置千位分隔符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!