Untuk menghasilkan file csv dengan pemisah numerik yang benar ('.' atau ','), karena saya ingin mereka kompatibel dengan versi Excel yang diinstal pada mesin, saya perlu mendapatkan karakter pemisah desimal dari program C++.

Mesin saya memiliki Windows/Excel versi Prancis, jadi pemisah desimal adalah ','.

int main()
{
    std::cout << std::use_facet< std::numpunct<char> >(std::cout.getloc()).decimal_point();
    return 0;
}

Output ., yang tidak diharapkan

Saya mencoba menggunakan WIN32 API:

int main()
{
    TCHAR szSep[8];
    GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, szSep, 8);
    std::cout << szSep;
}

Output ,, yang diharapkan.

Apakah ada yang setara dengan fungsi GetLocaleInfo ini di STL yang akan bekerja di dalam main sederhana?

4
jpo38 15 Desember 2017, 18:39

1 menjawab

Jawaban Terbaik

Berkat contoh tertaut user0042, cara yang tepat untuk melakukan ini menggunakan STL adalah:

int main()
{
    // replace the C++ global locale as well as the C locale with the user-preferred locale
    std::locale::global(std::locale(""));
    // use the new global locale for future wide character output
    std::cout.imbue(std::locale());

    std::cout << std::use_facet< std::numpunct<char> >(std::cout.getloc()).decimal_point();
}

Output ,, yang diharapkan.

Atau, jika Anda tidak ingin mengubah global:

int main()
{
    std::cout.imbue(std::locale(""));
    std::cout << std::use_facet< std::numpunct<char> >(std::cout.getloc()).decimal_point();
}
0
jpo38 15 Desember 2017, 16:06