0

在我想知道的 Windows 上,使用 C++ 的小数点后会有多少位数。我在 windows 中使用了 locale.h 标头,有 struct lconv ,它提供了很多关于语言环境设置的信息,但它只给出了货币(金钱)数量的小数点后的位数,但我必须获取语言环境设置正常值。请帮帮我,我怎样才能得到小数点后的小数位数?

4

2 回答 2

1

数字中十进制字符的数量与语言环境无关。std::ostream您可以使用调整 a 显示的小数位数std::setprecision。见那里的例子。

于 2012-12-31T11:35:25.823 回答
1

我第一次看错了这个问题。我的错。这是修改后的答案。

这不是“C++”的答案,但既然你说的是“在 Windows 上”,我会告诉你如何用 Win32 完成它。

GetLocalInfoEx (lcid, LOCALE_IDIGITS , ...) 获取小数点后的位数。

#include <Windows.h>
#include <Winnls.h>
#include <stdio.h>

int GetNumberOfDigitsForDecimal()
{
    const int stringsize = 2; // docs for LOCALE_IDIGITS says this won't be more than 2 including the null char

    wchar_t value[stringsize] = {};
    GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_NOUSEROVERRIDE|LOCALE_IDIGITS, value, stringsize);
    return _wtoi(value);
}

您没有建议如何获取语言环境(lcid)值,所以我假设当前登录的用户。请注意,在 Windows 上,用户可以转到控制面板并更改他的时间、数字和日期格式说明符。(控制面板->区域->其他设置)。如果您想尊重他的设置而不是该语言的默认设置,您可以删除上面的 LOCALE_NOUSEROVERRIDE 标志。

如果您需要支持 Windows XP,请使用GetLocaleInfo而不是 GetLocaleInfoEx

于 2012-12-31T12:29:08.660 回答