【问题标题】:"Double" is not printing more than 6 significant digits even after setprecision即使在 setprecision 之后,“Double”也不会打印超过 6 个有效数字
【发布时间】:2021-07-07 23:13:10
【问题描述】:

我正在自学 C++,出于某种原因,即使在 std::setprecision 之后,“double”也不会打印超过 6 个有效数字。我需要做其他事情吗?如果有帮助,最新版本的代码块。这是所有代码:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    std::setprecision(9);
    double A = 654321.987;
    cout << A << endl;
    return 0;
}

【问题讨论】:

  • 请注意,123456e10 123.456 和 123456e-10 都有 6 个有效数字654321.987 有 9 个。
  • 试试setprecision(15) 之类的有趣的东西。保证打印 6 个有效数字。
  • 战术说明:Code::Blocks 是一个位于单独 C++ 编译器之上的工具,因此经常说“最新的 Code::Blocks”传达的信息很少。它可能位于一个古老的编译器之上。它可能位于最近从树干拉出的顶部。在 Windows 上,一些 Code::blocks 包附带 mingw-GCC 工具链,我相信最新的官方版本附带 GCC 8.1。酷孩子们正在使用 GCC 11.1。我不是很酷,所以我还在使用 GCC 10.2。和 6.3。和4.8。还有 3.3。
  • 是的。我仍然在为一个不会死的产品摇晃一个 20 年的编译器。坦率地说,我认为这是一场胜利。

标签: c++ codeblocks


【解决方案1】:

您需要将std::setprecision(9) 的结果提供给std::cout。否则它无法知道它适用于哪个输出流(因此它不会适用于任何东西)。

std::cout << std::setprecision(9) << A << std::endl;

或者,如果您愿意,可以单独进行:

std::cout << std::setprecision(9);
std::cout << A << std::endl;

【讨论】:

  • 非常感谢,这样做更有意义。
  • 我注意到您个人资料中的链接不再有效,正确的链接似乎是 keith-s-thompson.github.io
  • @fedorqui'SOstopharming' 谢谢!
猜你喜欢
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 2012-08-24
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多