28

我看到很多关于浮点数精度数的问题,但我特别想知道为什么这段代码

#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。是因为原始的整数数据类型吗?

4

3 回答 3

33
#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显示尾随零。

于 2013-06-27T11:27:50.780 回答
4

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

precision 4 on 1.23456 you get 1.235  
precision 5 on 1.23456 you get 1.2346

如果您想n始终获取数字,则必须使用std::fixed.

于 2013-06-27T11:32:36.510 回答
2

行为是正确的。该参数指定要使用的最大有意义的位数。这不是最低要求。如果后面只有零,则不会打印它们,因为小数部分末尾的零没有意义。如果要打印零,则需要设置适当的标志:

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

这会将表示法设置为“固定”,它会打印所有数字。

于 2013-06-27T11:32:33.330 回答