以精度2打印浮点数但在C ++中没有小数(。)

时间:2013-07-23 07:25:36

标签: c++

请考虑以下代码段:

// setprecision example
#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision

int main () {
  double f =3.14159;
  std::cout.precision(2);

  std::cout << f*100 << '\n';
  return 0;
}

我想要做的是在屏幕314上打印(即打印f没有小数,精度为2)

我想首先将精度设置为2,然后乘以100。

但似乎精确度最终应用于f * 100。谁能建议任何方法在f上应用精度然后将数字乘以100,最后以精度0打印?

3 个答案:

答案 0 :(得分:5)

乘以100并以精度0打印。

int main () {
  double f =3.14159;
  std::cout.precision(0);

  std::cout << std::fixed << f*100 << '\n';
  return 0;
}

答案 1 :(得分:1)

实际上有一种“正确”的方法,而不必改变价值。您可以使用自己的std::ostringstream子类准备std::numpunct来为您执行此操作:

#include <locale>

class no_decimal_punct: public std::numpunct<char> {
protected:
    virtual char do_decimal_point() const
    { return '\0'; }
};

您现在可以准备一个std::ostringstream,它将使用上述no_decimal_punct类:

#include <sstream>
#include <iostream>

std::ostringstream strm;
strm.imbue(std::locale(strm.getloc(), new no_decimal_punct));
strm.precision(2);
std::fixed(strm);

double f = 3.14159;
strm << f;
std::cout << strm.str() << '\n';

这里的优点是你没有改变f的值,由于FP错误,它可能会打印除预期之外的东西。

答案 2 :(得分:0)

有很多方法可以显示314:

#include <iostream>
using namespace std;
int main() {
  const double PI = 3.1415926;
  cout.precision(3);
  cout<<PI * 100<<endl;
}

#include <iostream>
using namespace std;
int main() {
  const double PI = 3.1415926;
  cout<<(int)(PI * 100)<<endl;
}