将数字转换为格式化字符串并再次解析格式化字符串 在VisualC++中,我需要根据当前线程的位置,使用窗口的数字格式来格式化数字,如使用数字分组分隔符和窗口的小数点,也像C ^ .net .< /p>那样解析它。

将数字转换为格式化字符串并再次解析格式化字符串 在VisualC++中,我需要根据当前线程的位置,使用窗口的数字格式来格式化数字,如使用数字分组分隔符和窗口的小数点,也像C ^ .net .< /p>那样解析它。,c++,winapi,localization,globalization,C++,Winapi,Localization,Globalization,本文在将数字转换为格式化字符串时非常有用 但是如何逆转不清楚的操作我想知道如何做???你可以这样做(忽略那篇文章): 警告: Libraries may rely on the global local being the "C" local. 将这些数字存储在双精度存储器中几乎从来都不是一个错误。货币值应存储在使用十进制编码的数据类型中,如C#的System.Decimal。在C++标准中不支持,你需要去购物。另外,MSVC++支持COleCurrency类,请注意ParseCurrency

本文在将数字转换为格式化字符串时非常有用

但是如何逆转不清楚的操作我想知道如何做???

你可以这样做(忽略那篇文章):

警告:

Libraries may rely on the global local being the "C" local.

将这些数字存储在双精度存储器中几乎从来都不是一个错误。货币值应存储在使用十进制编码的数据类型中,如C#的System.Decimal。在C++标准中不支持,你需要去购物。另外,MSVC++支持COleCurrency类,请注意ParseCurrency()方法。感谢您的评论,但这确实没有帮助我使用它来解析234098.6700,它将其视为234.0000,它无法理解数字分组符号。我发现了这篇文章,我也没有读到它,直到现在如果我在其中找到了任何解决方案,我会在这里提到它。这太好了,我已经看过了,但我的问题是如何获得当前线程的区域名称???这是一个巨大的挑战,我的目标是一台客户端PC,我不知道它的语言环境设置是英语、德语还是阿拉伯语,…@Ahmed safan:意味着上面的代码不能在线程中工作!?它可以工作,但正如您所写的“您可能需要调整“en_GB.utf8”,我希望它与线程区域设置相同。此方法将当前线程区域设置作为ID而不是名称@Ahmedsafan:您注意到,系统区域设置相当于“”?(抱歉,我在那里做了编辑)我注意到了,但无论当前用户输入的是什么,它都是系统区域设置,我想获得当前用户输入的区域性。我有阿拉伯语埃及语和英语美国,当我选择一种文化时,如何检索它。
#include <iomanip>
#include <iostream>
#include <sstream>

int main() {

    // Environment
    std::cout << "Global Locale: " << std::locale().name() << std::endl;
    std::cout << "System Locale: " << std::locale("").name() << std::endl;

    // Set the global locale (To ensure it is English in this example,
    // it is not "")
    std::locale::global(std::locale("en_GB.utf8"));
    std::cout << "Global Locale: " << std::locale().name() << std::endl;

    // Conversion string to double
    std::istringstream s("108,457,000.89");
    double d = 0;
    s >> d;
    // Conversion double to string
    std::cout << std::fixed << d << std::endl;
    // This stream (initialized before main) has the "C" locale,
    // set it to the current global:
    std::locale c = std::cout.imbue(std::locale());
    std::cout << "Locale changed from " << c.name()
        << " to " << std::cout.getloc().name() << std::endl;
    std::cout << std::fixed << d << std::endl;

    return 0;
}
Global Locale: C
System Locale: en_US.UTF-8
Global Locale: en_GB.utf8
108457000.890000
Locale changed from C to en_GB.utf8
108,457,000.890000
Libraries may rely on the global local being the "C" local.