多くのヨーロッパ諸国ではコンマを使用しているため、3.141592
の代わりにpiを3,141592
として読み書きしたいと思います。 iostream
でこれをどのように達成できますか?言い換えれば小数点記号をカンマに設定するにはどうすればよいですか?
cout << 3.141592;
は標準出力に
3,141592
を印刷する必要があります。
多くのヨーロッパ諸国ではコンマを使用しているため、3.141592
の代わりにpiを3,141592
として読み書きしたいと思います。 iostream
でこれをどのように達成できますか?言い換えれば小数点記号をカンマに設定するにはどうすればよいですか?
cout << 3.141592;
は標準出力に
3,141592
を印刷する必要があります。
basic_ios::imbue
を使用して優先ロケールを設定する必要があります。
はこちらをご覧ください:http://www.cplusplus.com/reference/ios/ios_base/imbue/
ロケールは米国でドットがまだ使用されている、イタリアのコンピュータが別の小数点以下の桁にカンマを使用していますので、もしあなたが、ユーザーによる好ましい方法を使用することができます。ロケールを使用することは良い習慣です。
しかし、あなたが明示的にカンマの使用を強制したい場合は、ここで見てみましょう: http://www.cplusplus.com/reference/locale/numpunct/decimal_point/
ここで私はちょうど文字を強制グラム++で作られた小さな例「」(テンプレートとしてのセパレータを渡します引数には、私は現在設定されているロケールに1つだけのファセットをオーバーライドしていcout.getloc()
を使っつまり、COUTの現在のロケール設定で、私は変更てること
#include <iostream>
#include <locale>
template <class charT, charT sep>
class punct_facet: public std::numpunct<charT> {
protected:
charT do_decimal_point() const { return sep; }
};
int main(int argc, char **argv) {
std::cout.imbue(std::locale(std::cout.getloc(), new punct_facet<char, ','>));
std::cout << "My age is " << 3.1415 << " lightyears.\n";
}
)本当に、楽しみのためだけに注意必要はありません句読点がどのように行われるかだけです。
do_decimal_point
は、カスタムセパレータを提供するために再定義できるstd::numpunct
の仮想関数です。この仮想関数は、番号を印刷するときにnumpunct::decimal_point
によって使用されます。
@AkiRossによると、ロケールを使用する必要があります。これは、体系的でなければなりません
std::locale::global(std::locale(""));
:main
で非常に最初のアクションのいずれかが同じよう 何かをすることによって、ユーザーの選択にグローバルロケールを設定するべきであるあなたが書いたすべての プログラム、一般に、 、 と人間のユーザとの相互作用のすべてのプログラム。この後に開くすべてのファイルは、 に自動的に正しいロケールが埋め込まれます。
また、あなたが明示的 使用したいロケールを指定することができます。
std::locale::global(std::locale(locale_name));
これに伴う問題は、ロケール 名には標準がないことです。 "it_IT.UTF-8"
のようなものは、Posix 標準に対応し、インターネット上で使用されます。 Windowsは伝統的に が別のフォーマットを使用しています(最近のWindowsでは もこのフォーマットを受け入れていますが)。
std::cin
,std::cout
およびstd::cerr
が残っています。これらはmain
と入力する前に開かれた であり、新しいロケール で埋め込まれている必要があります。 (現在のグローバルロケールのコピーを入手するには、 std::locale
のデフォルトコンストラクタを使用しています。)あなたが任意のバイナリファイルを開いている場合
最後に、彼らはまた、世界的なロケールを吹き込まれる ことに注意してください。どちらがコード を翻訳する可能性があります。このような場合は、 をstd::locale::classic()
に明示的に埋め込むか、 codecvt
ファセットのstd::locale::classic()
とグローバルロケールの他の ファセットをマージして新しいロケールを作成する必要があります。 (std::locale
には、このための特別な 関数とコンストラクタがあります)。
'double x = 3,14;'のように? –
標準出力では、実行時(コンパイル時ではなく)にファイルを入力、読み込み、書き込みすることはできません。 –
1ワード:ロケール。 – PlasmaHH