1

正要问这个问题,又找了几个要问。

然后(根据最佳答案)我将如何继续只显示一次调用 cout 的精度,然后再禁用它?

假设我想显示前三个调用的精度,但不是最后一个:

(为了实验,我命名了一个与“固定”格式说明符同名的变量)

#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

如果您不想看到小数位,一种(丑陋的)方法是将其投射到int之前。cout

类似的东西(C风格 - 对于原始类型仍然可以)

cout << (int)flak << endl;

或(C++ 风格- 推荐,特别是对于非原始类型,如类)

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

这只会改变所cout看到的,而不是变量本身。

于 2012-12-27T05:30:00.217 回答