C++ 双精度:使用实际的小数位数

C++ 双精度:使用实际的小数位数,c++,C++,我正在创建一个计算器程序,但我不知道如何设置计算出的答案的小数位精度,以便显示实际的小数位。 示例: -如果答案是6,它将显示6,而不是6.0000000 -如果答案是8.23,它将显示8.23,而不是8.23000000 等等 如何设置精度?基本上,您可以设置: std::cout.precision(6); // 6 digits 或者任何你需要的价值。或: std::cout << std::setprecision(5) << my_double_value &

我正在创建一个计算器程序,但我不知道如何设置计算出的答案的小数位精度,以便显示实际的小数位。 示例: -如果答案是6,它将显示6,而不是6.0000000

-如果答案是8.23,它将显示8.23,而不是8.23000000

等等


如何设置精度?

基本上,您可以设置:

std::cout.precision(6); // 6 digits
或者任何你需要的价值。或:

std::cout << std::setprecision(5) << my_double_value << std::endl;

std::cout
iostream
提供了
setprecision
功能:

  double f =3.14159;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n';
  std::cout << std::fixed;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n'

C++中,使用方法精度设置需要的占位符的数量,如:

 double f = 3.14159;
  std::cout.unsetf ( std::ios::floatfield );                // floatfield not set
  std::cout.precision(5); //will output 5 digits after point
  std::cout << f << '\n';
  std::cout.precision(10); //will output 10 digits after point, like 3.1415900000
  std::cout << f << '\n';
  std::cout.setf( std::ios::fixed, std:: ios::floatfield ); // floatfield set to fixed
  std::cout << f << '\n';
这将有助于:

printf("%g",value);
没有“实际小数位数”。双精度有许多二进制位,但它们不能可靠地映射到小数位数。一个简单的例子是
1.0/10,0
,它应该是0.1,但实际上是一个非常接近0.1的数字;因此,对于这样的总和,显示多少个小数位并不是double本身的特性,而是要显示多少个小数位


其他答案中已经讨论了如何截断为所需的数字。

如何显示数字?你在用什么文件?据我所知,他不想要任何尾随的零。所以,这不仅仅是一个精确的问题。“Layne STD::SealEdvor不显示尾随零。无论如何,答案并不合理,因为OP说他意外地将此标记为C++。”哇!我其实不知道。但你可能会意外地剪掉一个不是零的数字。@Layne。通常你必须考虑<代码>双f=1/3 < /代码>
std::cout.precision(0);
printf("%g",value);