2017-12-15 10 views
3

正しい数値セパレータ( '。'または '、')を使用してcsvファイルを生成するには、コンピュータにインストールされているExcelバージョンと互換性があるため、 C++プログラムの小数点区切り文字。STLを使用してシステムの小数点区切り文字を取得する

私のマシンにはフランス語版のWindows/Excelがありますので、小数点の区切り記号は '、'です。私は、WIN32 APIを使用してみました

を期待されていない

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

出力.、:

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

出力,、期待されています。

mainの中で動作するこのGetLocaleInfoの機能はSTLにありますか?リンクされている例をuser0042する

+2

[ 'のstd :: locale'](http://en.cppreference.com/w/cpp/locale/locale)その情報をポータブルな方法で提供します。 – user0042

+0

@ user0042リンクベースの回答は推奨されませんので、コメントとして回答しています - 私はあなたがそれを移行するべきだと思います。 – UKMonkey

+0

@UKMonkeyしかしOPの使い方は、実際には 'std :: locale'の設定に基づいているように見えます。だから私は答えとしてそれを書いていませんでした。 – user0042

答えて

0

おかげで、この使用してSTLを行うための適切な方法は次のとおりです。期待されている

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(); 
} 

出力,、。

それとも、あなたがグローバルを変更しない場合:

int main() 
{ 
    std::cout.imbue(std::locale("")); 
    std::cout << std::use_facet< std::numpunct<char> >(std::cout.getloc()).decimal_point(); 
} 
関連する問題