【问题标题】:output to stream float numbers with precision输出以精确地流式传输浮点数
【发布时间】:2012-02-20 06:24:46
【问题描述】:

浮点数精度有问题:

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做了一个测试

【问题讨论】:

    标签: c++ stream numbers precision


    【解决方案1】:

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

    小数精度决定最大位数 写在插入操作上以表达浮点值。

    您可能正在寻找将 setprecision 与 fixed 结合使用。

    【讨论】:

      猜你喜欢
      • 2016-08-07
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多