ページ 11

C++で"%.5f"のようにフォーマットを指定する方法

Posted: 2012年9月11日(火) 01:54
by ghffmj
txtファイルに小数を書き込んでいるのですが、小数点以下の桁数を合わせたいと思っています。
C言語では簡単に%.5fのようにしてやればできましたが、C++ではどうすればよいのでしょうか?

ostreamを用いています。fprintfを用いればできるのでしょうが、ostreamを用いて行いたいです。

よろしくお願いします。

Re: C++で"%.5f"のようにフォーマットを指定する方法

Posted: 2012年9月11日(火) 03:03
by かずま

コード:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    cout << 3.14159265358979 << endl; // "%.6g"
    cout.precision(5);          
    cout << 2.718281828 << endl;      // "%.5g"       
    cout.setf(ios::fixed, ios::floatfield);
    cout << 2.718281828 << endl;      // "%.5f"

    // manipulator を使う方法
    cout << setprecision(3)
        << resetiosflags(ios::floatfield)
        << setiosflags(ios::scientific) 
        << setw(12)
        << 3.14159265 << endl         // "%12.3e"
        << 3.14159265 << endl;        // "%.3e"
}
setw() は 1回使用されると、元に戻ります。
setprecision() などは、設定がずっと有効で、何度でも使用されます。

Re: C++で"%.5f"のようにフォーマットを指定する方法

Posted: 2012年9月11日(火) 03:56
by ghffmj
回答ありがとうございます。できました!

setf(ios::fixed, ios::floatfield)を使う必要があるのですね。precisionを使うというのは分かったのですが、これだけだと思うようにいかずに困っていました。

また疑問が芽生えてしまったのですが、マニピュレータを用いずに、%9.6fのようなことはできますか?
また、メンバ関数を使って設定した場合、ずっと効果が続くようですが、リセットするにはどうすればよいのでしょうか?

Re: C++で"%.5f"のようにフォーマットを指定する方法

Posted: 2012年9月11日(火) 05:22
by へにっくす
少しは調べましょうね。
D.9 書式付き出力
ghffmj さんが書きました:リセットするにはどうすればよいのでしょうか?
リセットに該当するものはないような。。
setfの逆、unsetfはあるので、これで解除してみればどうかと

Re: C++で"%.5f"のようにフォーマットを指定する方法

Posted: 2012年9月13日(木) 00:29
by ghffmj
かずまさん、へにっくすさんありがとうございました。

Re: C++で"%.5f"のようにフォーマットを指定する方法

Posted: 2012年9月13日(木) 07:50
by beatle
標準ライブラリではありませんが、boost::formatは如何でしょうか。
または sprintf と ostream を併用するとか。