2013-07-17 9 views
7

オペレータにローカル設定を使用する< <を作成したい、または少なくとも手動で「。」の使用を変更できないようにしたい。小数点の区切り記号を "、"にします。私はストリームを作成する方法(iostream、fstreamなど)を行い、文字列を作成して印刷しないようにします。どのようにフロートを使用してカンマを使用してポイントしないのですか?

これは可能ですか?

+0

既にユーザーのロケールが使用されているはずですか?そうでない場合は、ストリーム上にimbue()が1つあります。 – Pete

+3

"コロン"ではなく "コンマ"を意味しませんか? – Michael

+3

また、 '、'はコンマであり、コロンではありません。 – Pete

答えて

13

ストリームに数値ファセットを埋め込むことができます。ヨーロッパのロケールを使用する短いソリューション、

template <typename T> 
struct comma_separator : std::numpunct<T> 
{ 
    typename std::numpunct<T>::char_type do_decimal_point() const 
    { 
     return ','; 
    } 
}; 

template <typename T> 
std::basic_ostream<T>& comma_sep(std::basic_ostream<T>& os) 
{ 
    os.imbue(std::locale(std::locale(""), new comma_separator<T>)); 
    return os; 
} 

int main() 
{ 
    std::cout << comma_sep << 3.14; // 3,14 
} 

Here is a demo.


:私はこのような何かがあなたのために働く必要があると考えてい

std::cout.imbue(
    std::locale(
     std::cout.getloc(), new std::numpunct_byname<char>("de_DE.utf8"))); 

しかし、最終的にはそのロケールに依存しますあなたのシステムは提供します。

+2

+1それほど簡単ではないことは分かっていませんでした。 – dyp

+5

OSロケールに対応するファセットを使用する方が、そのようなカスタムロケールを使用する方が良いでしょうか? –

+0

@MarkRansomは依存しています - その場合のOPの質問に直接答えるわけではありません。もし彼がアメリカにいて私たちにアメリカ人にカンマを見せたいのであればどうですか?真意を知っている人 –

関連する問題