正确使用std :: cout.precision() - 不打印尾随零

时间:2013-06-27 11:25:50

标签: c++ floating-point-precision

我看到很多关于浮点数的精度数的问题,但具体来说我想知道为什么这个代码

#include <iostream>
#include <stdlib.h>
int main()
{
  int a = 5;
  int b = 10;
  std::cout.precision(4);
  std::cout << (float)a/(float)b << "\n";
  return 0;
}

显示0.5?我希望看到0.5000。 是因为原始的整数数据类型吗?

3 个答案:

答案 0 :(得分:22)

#include <iostream>
#include <stdlib.h>
#include <iomanip>
int main()
{
  int a = 5;
  int b = 10;
  std::cout << std::fixed;
  std::cout << std::setprecision(4);
  std::cout << (float)a/(float)b << "\n";
  return 0;
}

您需要将std::fixed操纵符传递给cout才能显示尾随零。

答案 1 :(得分:3)

std::cout.precision(4);告诉使用的最大位数不是最小值。 这意味着,例如,如果您使用

precision 4 on 1.23456 you get 1.234  
precision 5 on 1.23456 you get 1.2345

如果您希望始终获得n位数,则必须使用std::fixed

答案 2 :(得分:1)

行为是正确的。参数指定要使用的最大有意义的位数。这不是最低限度。如果仅跟随零,则不会打印它们,因为小数部分末尾的零没有意义。如果你想打印零,那么你需要设置适当的标志:

std::cout.setf(std::ios::fixed, std::ios::floatfield);

这会将符号设置为“fixed”,它会打印所有数字。