输出以精确流式传输浮点数

时间:2012-01-27 07:47:52

标签: c++ stream numbers precision

浮点数精度有问题:

int main(void) {
  double b = 106.829599;
  float a = b;
  std::cerr << std::setprecision(6) << "a = " << a << "; b = " << b << std::endl;
  std::cerr << std::setprecision(7) << "a = " << a << "; b = " << b << std::endl;
}

结果是:

  

a = 106.83; b = 106.83

     

a = 106.8296; b = 106.8296

所以,我的问题是为什么第一行的数字如此之短(我期待看到106.829)

gcc 4.1.2,我也在LWS

进行了测试

1 个答案:

答案 0 :(得分:8)

实际上,106.829599舍入到6位数(3位小数)是106.830,显示为106.83,因为setprecision的6位数精度只是最大值。

  

小数精度确定最大位数   写入插入操作以表示浮点值。

您可能正在寻找的是将setprecision与fixed相结合。