小数点以下3桁のC ++ストリーム出力。どうやって?

浮動小数点型の変数を持ち、小数点の後に3桁の数字を出力したい場合は、iostreamをC ++で使用します。私はそれをどのようにすることができますか?

10

3 答え

setf 精度 を選択します。

#include 

using namespace std;

int main() {
    double f = 3.14159;
    cout.setf(ios::fixed,ios::floatfield);
    cout.precision(3);
    cout << f << endl;
    return 0;
}

This prints 3.142

15
追加された
@manlerあなたは正しいです、私の元の投稿はしませんでしたが、最後のもの(私が11分前に編集したもの)は正しく動作します。私は小数点の前に2桁と3桁で確認し、3桁を期待どおりに出力します。
追加された 著者 dasblinkenlight,
これは3.14159で動作しますが、13.14159では動作しません。あなたのソリューションは、10未満の数字に対してのみ機能します。
追加された 著者 mantler,
@dasblinkenlight ok! :)
追加された 著者 mantler,
ありがとう。それは私のために役立った。
追加された 著者 ozeron,

これは "13.141"と表示されます

#include 
#include 
using namespace std;

int main(){
    double f = 13.14159;
    cout << fixed;
    cout << setprecision(3) << f << endl;
    return 0;
}
6
追加された

iomanip ヘッダーを使用すると、固定小数点数(および他の多くのもの)を取得できます。例えば:

#include 
#include 

int main() {
    double pi = 3.141592653589;
    std::cout << std::fixed << std::setprecision(2) << pi << '\n';
    return 0;
}

出力されます:

3.14

ただし、 fixed setprecision の両方でストリームが完全に変更されるため、エフェクトをローカライズする場合は事前に情報を保存してから復元することができます。

#include 
#include 

int main() {
    double pi = 3.141592653589;

    std::cout << pi << '\n';

   //Save flags/precision.
    std::ios_base::fmtflags oldflags = std::cout.flags();
    std::streamsize oldprecision = std::cout.precision();

    std::cout << std::fixed << std::setprecision(2) << pi << '\n';
    std::cout << pi << '\n';

   //Restore flags/precision.
    std::cout.flags (oldflags);
    std::cout.precision (oldprecision);

    std::cout << pi << '\n';

    return 0;
}

その出力は次のとおりです。

3.14159
3.14
3.14
3.14159
4
追加された
@Khaled、コメントボックス内に収まりきらないほど複雑なものについては議論があります:-)私は、最もシンプルなプログラムを除いてすべての明示的な名前空間を好むか、最低限、特定の項目を使用しています 内部では、名前空間全体をインポートするのではなく、しかし、その特定の議論は質問と私の答えに接しています。
追加された 著者 paxdiablo,
この行を "using namespace std;"を使ってよりクリーンなコードにする
追加された 著者 Khaled Saif,
ストリーム設定を保存して復元する方法を示してくれてありがとう、非常に役に立ちました。
追加された 著者 bhaller,