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;
}
この出力
Bas ana:3284.78 Son faiz:1784.78 Son ana:5069.55
Bas ana:7193.17 Son faiz:3908.4 Son ana:11101.6
Bas ana:15752 Son faiz:8558.8 Son ana:24310.8
Bas ana:34494.5 Son faiz:18742.5 Son ana:53237
Bas ana:75537.8 Son faiz:41043.3 Son ana:116581
Bas ana:165417 Son faiz:89878.7 Son ana:255295
Bas ana:362238 Son faiz:196821 Son ana: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
Bas ana:3.80397e + 006 Son faiz:2.06688e + 006 Son ana:5.87085e + 006
科学的な数字ではなく正確な数字で数字を表示したい。これどうやってするの?
つかいます - std::fixed
ストリームマニピュレーター:
cout<<fixed<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;
上記のように、次のようにstd :: fixedを使用して問題を解決できます。
cout << fixed;
cout << "Bas ana: " << x << "\tSon faiz: " << t << "\tSon ana: " << x+t <<endl;
ただし、これを行った後、プロジェクトの任意の場所でフロートまたはダブルを印刷するたびに、この固定表記で番号が印刷されます。を使用して元に戻すことができます
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 library をチェックアウトすることもできます。これにより、特に国際化に対処する必要がある場合に、出力が容易になります。ただし、この特定の問題には役立ちません。
次の構文をコーディングします。
std::cout << std::fixed << std::setprecision(n);
ここで、(n)
は10進精度の数です。これで修正されるはずです。
形式フラグを使用できます
詳細: http://www.cplusplus.com/reference/iostream/ios_base/fmtflags/
Iostreamで使用できる書式設定演算子のコレクションがあります。ここに tutorial があります。