【问题标题】:how to set.precision on multiple variables in a single cout如何在单个 cout 中设置多个变量的精度
【发布时间】:2016-02-09 05:55:14
【问题描述】:

我主要有这个:

Product newProduct;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
newProduct.display();

在 Product.cpp 我有:

cout << "$" << basePrice << " - " 
     << name << " - " << cout.precision(1) << weight << " lbs\n";

但在 .cpp 中将精度更改为 (1) 也会将 basePrice 更改为 (1)。如何更改同一 cout 中不同变量的精度?有办法吗?还是我只是将它们放在不同的 cout 中?那还能用吗?为什么或者为什么不?

更新 当我尝试第二个 cout 时,它会将数字 2 添加到我的 name 变量的末尾。换句话说,我在 name 变量之后结束了第一个 cout。它正在工作,但在末尾添加了数字 2。

【问题讨论】:

    标签: c++ precision cout setf


    【解决方案1】:

    改用std::setprecision 操纵器:

    cout << setprecision(2) << "$" << basePrice << " - " 
     << name << " - " << setprecision(1) << weight << " lbs\n";
    

    数字2cout.precision()函数的返回值,是当前精度值,被插入到流中并输出。

    编辑:

    哎呀,忘了加#include &lt;iomanip&gt;

    编辑 2:

    为了完整起见,请参阅我的this question,了解为什么在中间调用cout.precision() 会影响整个流。

    【讨论】:

    • 成功了!那么这两个函数有什么区别呢?
    • precisioncout 的成员函数,而setprecision() 是所谓的操纵器对象(虽然也是一个函数)。显然,您可以在流中使用后者,而前者需要在调用operator&lt;&lt; 之间调用。此外,与前者相反,后者不返回值。
    • setprecision 肯定会返回一些东西;否则,将它与 &lt;&lt; 运算符一起使用会出现问题。它返回的是一个库内部类型的对象,其中有&lt;&lt; 运算符的重载。该特定重载将设置流的精度,然后返回流。
    • @rici,我刚刚问了一个关于这些细节的问题,欢迎您加入。我是基于 cplusplus.com/reference/iomanip/setprecision 此处的“unspecified”返回值,一般来说,这个的语义,而不是确切的细节。谢谢指正!
    • @rici 是这样发生的吗:stackoverflow.com/questions/4633864/… 注意:这里有一个函数直接返回流,无需创建额外的对象。还是未定义且依赖于实现?
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2011-10-18
    • 2012-07-05
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多