我是C ++的新手,我自己学习,我正在使用Deitel的“C ++ how to program - 7th edition”这本书。现在,请查看以下代码
#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开发人员,我认为这些可能是某种常量变量,但事实并非如此!他们是方法吗?那为什么括号不在那里?请回答这个问题。
由于
答案 0 :(得分:6)
输出不会“变得愚蠢”:您只需让输出流选择浮点数的格式,并选择科学记数法。这会为您1e+03
(代表1*10^3
)而不是1050.00
。 fixed
的使用告诉流你不需要科学记数法;你也可以使用scientific
来强制科学格式。由于精确的格式取决于您的应用程序要求,因此使用fixed
或scientific
的选择最终取决于您。
答案 1 :(得分:1)
像fixed这样的操纵器是函数,但是如果你想要它的common()那么它会是这样的:
固定的(COUT); //而不是使用&lt;&lt;或&gt;&gt;你将流传递给操纵器函数。
有关操纵器的更多信息,请参阅此参考资料:
http://www.cplusplus.com/reference/iostream/manipulators/
此外,可以在此处找到修复文档:
http://www.cplusplus.com/reference/iostream/manipulators/fixed/
希望这有帮助
答案 2 :(得分:0)
这不仅仅是ascii字母和数字
1e + 03是1 * 10 ^ 3的科学写作,即1000
供参考: http://www.cplusplus.com/reference/iostream/manipulators/fixed/
答案 3 :(得分:0)
如果您选择了更宽的精度,那么在没有fixed
的情况下输出会有所不同。
cout << setprecision(6); // 6 instead of 2
然后你的输出看起来更像你的期望。 (顺便提一下,你应该通过将获得的利息折叠回原则来计算复利。)
否则,只有setprecision(2)
,格式化程序决定使用科学记数法才能显示2位数的精度。
但是,由于您希望输出提供固定数量的数字,因此您提供的内容(fixed
和setprecision(2)
)都会这样做。