我是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
来强制使用科学格式。由于精确的格式取决于您的应用要求,因此选择使用fixed
或scientific
最终取决于您。
像 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 位精度。
但是,由于您希望输出提供固定数量的位数,因此您提供的内容(fixed
和setprecision(2)
)将做到这一点。