【问题标题】:C - Printing out float valuesC - 打印出浮点值
【发布时间】:2013-03-19 21:56:29
【问题描述】:

我有一个 C++ 程序,它接收值并打印出如下值:

getline(in,number);
cout << setw(10) << number << endl;

我有一个等效的 C 程序,它接收值并像这样打印出来:

fscanf(rhs, "%e", &number);
printf("%lf\n", number);

但是当 C++ 程序打印出来时,0.30951 C 程序打印出 0.309510。更多示例:C++:0.0956439 C:0.095644。只要值是 7 位长,它似乎打印相同的结果,但如果它更短 7 位,它会在末尾添加一个额外的 0。如果它的长度超过 7 位,则向下舍入到 6 位。我希望 C 结果与 C++ 程序相匹配。任何帮助将不胜感激。

谢谢。

注意:数字是浮点数,数字是从文件中读取的。

【问题讨论】:

  • 您要更改 C 结果以匹配 C++ 还是反之亦然?
  • 正确,我希望 C 结果与 C++ 匹配。

标签: c++ c floating-point precision


【解决方案1】:

利用 C++ 中的长度和精度说明符 iostreams

std::cout.precision(4);
std::cout << std::setw(10) << number << "\n";

【讨论】:

  • 您也可以直接在该流中设置精度:"std::cout
【解决方案2】:

利用 C 格式打印语句中的长度和精度说明符:

printf( "%6.4lf", number );

在六个字符宽的“单元格”中打印四个小数位。

您可以使用通配符来表示长度或精度,以便在运行时提供该值:

int precision = 4;

printf( "%6.*lf", precision, number );

【讨论】:

    【解决方案3】:
    printf("%g\n", number); 
    

    会解决你的问题,%lf 用于双精度,%f 用于浮点数,%g 用于浮点数,当您要显示所有小数位并截除零时。

    【讨论】:

      猜你喜欢
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      相关资源
      最近更新 更多