3

列に揃えられたテキストファイルに数値を書き込もうとしています。私のコードは次のようになります:

ofstream file;
file.open("try.txt", ios::app);
file << num << "\t" << max << "\t" << mean << "\t << a << "\n";

値の桁数が同じでない場合を除いて、機能します。値は整列しません。私が欲しいのは次のとおりです。

1.234567  ->  1.234
1.234     ->  1.234
1.2       ->  1.200
4

4 に答える 4

6

それはあなたが望むフォーマットに依存します。固定小数点の場合、次のようになります。

class FFmt
{
    int myWidth;
    int myPrecision;
public:
    FFmt( int width, int precision )
        : myWidth( width )
        , myPrecision( precision )
    {
    }
    friend std::ostream& operator<<(
        std::ostream& dest,
        FFmt const& fmt )
    {
        dest.setf( std::ios::fixed, std::ios::floatfield );
        dest.precision( myPrecision );
        dest.width( myWidth );
    }
};

あなたが書くことができるように、トリックを行う必要があります:

file << nume << '\t' << FFmt( 8, 2 ) << max ...

(または任意の幅と精度)。

浮動小数点演算を行う場合は、そのようなマニピュレーターをテイクキットに含める必要があります(ただし、多くの場合、フォーマットするデータの論理的な意味にちなんで名付けられた論理マニピュレーターを使用する方が適切です)。たとえば、度、距離など)。

私見ですが、マニピュレータを拡張してフォーマット状態を保存し、完全な式の最後に復元することも価値があります。(私のマニピュレータはすべて、これを処理する基本クラスから派生しています。)

于 2012-01-24T11:15:03.863 に答える
4

std::fixed、、を見てstd::setw()くださいstd::setprecision()

于 2012-01-24T11:07:05.197 に答える
2

最初に精度を変更する必要があります。

ここに良い例があります。

于 2012-01-24T11:06:53.753 に答える
2

方法は、を使用する場合と同じcoutです。この回答を参照してください。

于 2012-01-24T11:08:46.187 に答える