为C printf设置千位分隔符 [英] Set thousands separator for C printf

查看:52
本文介绍了为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

  1. 从现有文件en_USlocaledata/locales/目录中创建新文件en_AT
  2. thousands_sep的所有条目更改为thousands_sep "<U0027>"或要用作千位分隔符的任何字符。
  3. 将新文件内出现的所有en_US更改为en_AT
  4. 向文件localedata/SUPPORTED添加行:en_AT.UTF-8/UTF-8
  5. Build目录make localedata/install-locales中运行。
  6. 然后,新的locale将自动添加到系统中,并且程序可以立即访问。

在C/C++程序中,您可以使用:

切换到新的千位分隔符

setlocale( LC_ALL, "en_AT.UTF-8" );

将其与产生此输出的printf( "%'d", 1000000 );一起使用

1‘000’000


备注:当您在程序中需要在运行时确定的不同本地化时,您可以从加载所请求的localeman页面使用此example,只需替换en_AT中的LC_NUMERIC设置。

这篇关于为C printf设置千位分隔符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆