87
double x = 1500;
for(int k = 0; k<10 ; k++){
    double t = 0;
    for(int i=0; i<12; i++){
        t += x * 0.0675;
        x += x * 0.0675;
    }
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;      
}

これが出力

バス アナ: 3284.78 ソン ファイズ: 1784.78 ソン アナ: 5069.55

バス アナ: 7193.17 ソン ファイズ: 3908.4 ソン アナ: 11101.6

バス アナ: 15752 ソン ファイズ: 8558.8 ソン アナ: 24310.8

バス アナ: 34494.5 ソン ファイズ: 18742.5 ソン アナ: 53237

バス アナ: 75537.8 ソン ファイズ: 41043.3 ソン アナ: 116581

バス アナ: 165417 ソン ファイズ: 89878.7 ソン アナ: 255295

バス アナ: 362238 ソン ファイズ: 196821 ソン アナ: 559059

Bas ana: 793246 Son faiz: 431009 Son ana: 1.22426e+006

Bas ana: 1.73709e+006 Son faiz: 943845 Son ana: 2.68094e+006

バス アナ: 3.80397e+006 ソン ファイズ: 2.06688e+006 ソン アナ: 5.87085e+006

科学的な数値ではなく、正確な数値で数値を表示してほしい。これどうやってするの?

4

8 に答える 8

120

std::fixedストリーム マニピュレータを使用します。

cout<<fixed<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;
于 2011-03-06T17:19:47.973 に答える
36

上記のように、次のように使用std::fixedして問題を解決できます。

cout << fixed;
cout << "Bas ana: " << x << "\tSon faiz: " << t << "\tSon ana: " << x+t <<endl;

ただし、これを行った後は、プロジェクト内の任意の場所でfloataまたは aを出力するたびに、番号はこの固定表記で出力されます。を使用して元に戻すことができますdouble

cout << scientific;

しかし、コードがより複雑になると、これは面倒になる可能性があります。

これが、Boost がI/O Stream State Saver を作成した理由です。これは、使用している I/O ストリームを関数呼び出し前の状態に自動的に戻します。次のように使用できます。

#include <boost/io/ios_state.hpp> // you need to download these headers first

{
    boost::io::ios_flags_saver  ifs( os );

    cout << ios::fixed;
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;

} // at this bracket, when ifs goes "out of scope", your stream is reset

Boost の I/O ストリーム ステート セーバーの詳細については、公式ドキュメントを参照してください。

また、特に国際化に対処する必要がある場合は、出力を簡単にするBoost Format ライブラリも確認してください。ただし、この特定の問題については役に立ちません。

于 2011-03-06T20:13:36.557 に答える
3

フォーマットフラグを使用できます

詳細: http://www.cplusplus.com/reference/iostream/ios_base/fmtflags/

于 2011-03-06T17:16:50.953 に答える
1

iostream で得られるフォーマット演算子のコレクション全体があります。これは、開始するためのチュートリアルです。

于 2011-03-06T17:19:08.637 に答える
0

printfC++ で使用して、科学表記法なしで値を出力することもできます。

cinandcoutの代わりにscanfand を使用することもできprintfますが、100 万の数値を入力として 100 万行を出力する場合は、scanfandを使用する方が高速printfです。

#include<stdio.h>
#include<math.h>

  int main () { 
  double a = pow(2,99); 
  printf ("%lf\n",a); 
  return 0; 
  }

出力

633825300114114700748351602688.000000

于 2020-09-05T09:15:00.037 に答える