【问题标题】:How to properly print a double to cout in C++如何在 C++ 中正确打印 double 到 cout
【发布时间】:2013-03-27 14:22:30
【问题描述】:

我在发布之前查看了一些问题,但找不到我想要的东西,所以如果它是重复的,我很抱歉。

我有这个代码:

cout << "The balance at year " << i << " will be " << char(156) << std::setprecision(2)
     << balance << endl;

据我所知,这应该打印到控制台上:

£2.00
£100.46

*fyi 以上只是示例,我知道没有什么可以建议这些数字,但格式应该是这样的,对吧?

但这是我的输出:

£1e+002
£1.1e+002

为什么要这样做?

据我了解,使用 setprecision 将显示 2 位小数,仅此而已。

哦,而且几乎没有任何关于打印双打的问题说使用 setprecision 实际上声明这需要包括:

#include <iomanip>

【问题讨论】:

  • 您可以通过简单地在cout 行之前写下:double balance = 100.46; 来节省一些评论。在 C++ 中,像 &lt;iomanip&gt; 这样的标头可以包含在其他标准标头中,因此通常不需要显式使用。您假设使用 ISO 8859-1 或 8859-15 代码集;这在短期内是可以的,但最好知道它以后可能会造成麻烦。
  • 感谢您的评论,但我通过示例代码进行了简化,因此我没有发布不相关的内容,但没有像将双精度设置为等于数字然后打印那样简单。
  • 我打印出来的双精度值是计算的结果,所以它需要在打印时固定它的长度
  • 我们都知道您的真实代码更复杂,但您应该瞄准 SSCCE (Short, Self-Contained, Correct Example)。您可以:#include &lt;iostream&gt; using namespace std; int main() { double balance = 100.457213; cout &lt;&lt; "The balance at year " &lt;&lt; i &lt;&lt; " will be " &lt;&lt; char(156) &lt;&lt; std::setprecision(2) &lt;&lt; balance &lt;&lt; endl; } 作为完整的可运行程序,不是吗?
  • @leffler 是的,我相信我可以,但是对于需要这种简单答案的事情,我真的认为没有必要

标签: c++ printing double cout


【解决方案1】:

setprecision 设置精度、位数。

fixed 设置固定格式。

我打赌这会解决它。

【讨论】:

  • 非常感谢,我现在试一试,如果有效,请给出最佳答案
  • 非常感谢,现在不能接受答案,任何机会对这个问题进行一些投票,以便其他人可能首先被吸引到这里,许多其他答案实际上对此或包括因此只字未提为什么我把“正确”放在标题中
【解决方案2】:

使用std::fixed 设置固定格式,而不是科学计数法。

cout &lt;&lt; "The balance at year " &lt;&lt; i &lt;&lt; " will be " &lt;&lt; char(156) &lt;&lt; std::setprecision(2) &lt;&lt; std::fixed &lt;&lt; balance &lt;&lt; endl;

【讨论】:

    【解决方案3】:

    这样做:

    cout << "The balance at year " << i << " will be " << char(156) << std::setprecision(2) << std::fixed << balance << endl;
    

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 2018-06-25
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2022-09-11
      • 1970-01-01
      相关资源
      最近更新 更多