1

在 Windows 上使用 c++,

试图设置 swprintf 函数使用的语言环境。

我需要在打印出来的数字中包含千位分隔符。

我尝试了几种选择...

_wsetlocale(LC_NUMERIC, L""); //default locale

还..

_wsetlocale(LC_NUMERIC, L"english");

而且当然..

swprintf(buf, L"%d", 3546);

我还尝试按如下方式显示数字

auto locale = _get_current_locale();
_swprintf_l(buf, L"%d", locale, 3546);

我需要得到千位分隔符,即 3,456

我还放置了一个断点来查看locale变量的值,它包含lconv千位分隔符正确设置为的结构,......但是,swprintf 忽略了它。

4

1 回答 1

0

在 Linux 上测试

试试看:

setlocale(LC_NUMERIC, "en_US.ISO8859-1");

例子 :

#include <stdio.h>
#include <time.h>
#include <locale.h>

int main(void)
{
        setlocale(LC_NUMERIC, "en_US.iso88591");
        printf("%'d (%s)\n", 12345, setlocale(LC_NUMERIC, NULL));
        return 0;
}

你错过了'使用%'d而不是%d

仍在使用 wchar

#include <stdio.h>
#include <time.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
        setlocale(LC_NUMERIC, "en_US.iso88591");
        wprintf(L"%'d\n", 12345);
        return 0;
}

另一个例子 :

#include <stdio.h>
#include <time.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
        wchar_t buf[32];
        setlocale(LC_NUMERIC, "en_US.iso88591");
        swprintf(buf, 32, L"%'d", 12345);
        wprintf(L"%ls\n", buf);
        return 0;
}

视窗

那么今天我在 Windows 上进行了测试(使用 mingw),但没有实现......请阅读这个链接,它提供了一个解决方案http://c-faq.com/stdio/commaprint.html

于 2012-12-20T18:03:19.070 回答