1

私はこの質問をしようとしていましたが、さらに質問することがいくつかありました。

どのように (一番上の回答によると) cout への単一の呼び出しに対してのみこの精度を表示し、その後それを無効にしますか?

最初の 3 つの呼び出しの精度を表示したいが、最後の呼び出しは表示したくないとします。

(実験のために、「固定」書式指定子と同じ名前の変数に名前を付けました)

#include <iostream>
int main(){
   using namespace std;
   int spam = 5;
   double flak = 5.0;
   double result = spam * flak;
   double fixed = 42;
   cout.precision(1);
   cout << std::fixed << spam + flak << endl;
   cout << result << endl;
   cout << flak << endl;
   cout << fixed;
   return 0;
}
4

3 に答える 3

4

精度関数を再度呼び出して、次のように再適用できます。

int main(){
   using namespace std;
   int spam = 5;
   double flak = 5.0;
   double result = spam * flak;
   double fixed = 42;
   cout.precision(1);
   cout << std::fixed << spam + flak << endl;
   cout << result << endl;
   cout << flak << endl;
   cout.precision(3);
   cout << fixed;
   return 0;
}

これを行う別の方法は、<iomanip>ヘッダーを使用してstd::setprecision()関数を使用し、それを に渡すことstd::coutです。したがって、これを行うのと似ています。

#include <iomanip>
#include <iostream>

int main() {
   int spam = 5;
   double flak = 5.0;
   double result = spam * flak;
   double fixed = 42;
   std::cout << std::fixed << spam + flak << std::endl;
   std::cout << std::setprecision(1) << result << '\n' << flak << std::endl;
   std::cout << std::setprecision(0) << fixed;
   return 0;
}
于 2012-12-27T05:25:46.520 に答える
3

何が欲しいかわからない。ただし、C++ には、ストリームの状態を制御する方法がいくつか用意されています。

std::streamsize prec = cout.precision(); // store current precision setting
// some print here
std::cout.precision(prec)                // Roll-back
于 2012-12-27T05:38:26.223 に答える
1

1つの(醜い)方法は、小数点以下の桁数を表示したくない場合は、int前にキャストすることです。cout

(Cスタイル-プリミティブ型でも問題ありません)のようなもの

cout << (int)flak << endl;

または(C ++スタイル-特にクラスなどの非プリミティブ型に推奨)

cout << static_cast<int>(flak) << endl;

coutこれは、変数自体ではなく、表示内容のみを変更します。

于 2012-12-27T05:30:00.217 に答える