移除流操纵器时"fixed"问题

Issue when "fixed" stream manipulator is removed

本文关键字:fixed 问题 操纵      更新时间:2023-10-16

我是C++新手,我自己学习,我正在使用Deitel的"C++如何编程 - 第7版"一书。现在,请看下面的代码

    #include <iostream>
    #include <iomanip>
    #include <cmath>
    using namespace std;
    int main()
    {
        double principle = 1000;
        double amount;
        double rate = 0.05;
        cout << "Year" << setw(21) << "Amount on deposit" << endl;
        cout << fixed << setprecision(2);
        for(int years=1; years<=10; years++)
        {
            amount = principle * pow(1.0+rate,1.0);
            cout << setw(4) << years << setw(21) << amount << endl;
        }
}

当我删除"固定"流操纵器时,输出变得愚蠢,这意味着,只有 ascii 字母和数字。当我插入它时,输出没有任何问题。我的问题是,为什么会这样?对于所有具有"双"类型输出的程序,是否都必须使用"固定"?请帮忙。

还有一件事。什么是流操纵器?作为 Java 开发人员,我认为这些可能是某种常量变量,但事实并非如此!它们是方法?那为什么括号不存在呢?也请回答这个问题。

谢谢

输出不会"变得愚蠢":您只需让您的输出流选择浮点数的格式,它就会选择科学记数法。这为您提供了1e+03(这意味着1*10^3)而不是1050.00。使用 fixed 告诉流您不想要科学记数法;您也可以使用 scientific 来强制使用科学格式。由于精确的格式取决于您的应用要求,因此选择使用fixedscientific最终取决于您。

像 fixed 这样的操纵器是函数,但如果你想要它的通用 (),那么它看起来像这样:

fixed(cout);//不使用<<或>>而是将流传递到操纵器函数中。

有关机械手的更多信息,请参阅此参考:

http://www.cplusplus.com/reference/iostream/manipulators/

此外,固定文档可以在这里找到:

http://www.cplusplus.com/reference/iostream/manipulators/fixed/

希望这有帮助

这不仅仅是 ascii 字母和数字

1e+03

是 1*10^3 的科学写作,即 1000

供参考:http://www.cplusplus.com/reference/iostream/manipulators/fixed/

如果您选择了更宽的精度,如果没有 fixed,您的输出会有所不同。

        cout << setprecision(6); // 6 instead of 2

然后,您的输出看起来会更像您的预期。(顺便说一下,您应该通过将赚取的利息折回本金来计算复利。

否则,只有setprecision(2),格式化程序决定使用科学记数法,以便只显示 2 位精度。

但是,由于您希望输出提供固定数量的位数,因此您提供的内容(fixedsetprecision(2))将做到这一点。