1

私は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文字と数字だけです。挿入すると問題なく出力されます。私の質問は、なぜこれが起こっているのかということです。「double」タイプの出力を持つすべてのプログラムに「fixed」は必須ですか?助けてください。

そして別のこと。ストリームマニピュレータとは何ですか?Java開発者として、これらはある種の定数変数かもしれないと思いましたが、そうではありません!それらは方法ですか?では、なぜ角かっこがないのですか?この質問にも答えてください。

ありがとう

4

4 に答える 4

6

出力は「ばかげた」ものにはなりません。出力ストリームに浮動小数点数の形式を選択させるだけで、科学的記数法が選択されます。これにより、の代わりに1e+03(つまり)が得られます。を使用すると、科学的記数法が不要であることをストリームに通知します。科学的形式を強制するために使用することもできます。正確な形式はアプリケーションの要件によって異なるため、使用するか、最終的にはユーザー次第です。1*10^31050.00fixedscientificfixedscientific

于 2012-08-09T14:27:43.950 に答える
1

fixedのようなマニピュレーターは関数ですが、common()が必要な場合は、次のようになります。

fixed(cout); // <<または>>を使用する代わりに、ストリームをマニピュレータ関数に渡します。

マニピュレータの詳細については、次のリファレンスを参照してください。

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

また、修正されたドキュメントはここにあります:

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

お役に立てれば

于 2012-08-09T14:27:16.173 に答える
0

ASCIIの文字と数字だけではありません

1e + 03は、1000である1 * 10^3の科学的記述法です。

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

于 2012-08-09T14:28:06.053 に答える
0

より広い精度を選択した場合、出力は。なしでは異なっていたでしょうfixed

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

そうすれば、あなたの出力はあなたが期待したように見えたでしょう。(ちなみに、得た利息を原則に折り返して複利を計算する必要があります。)

それ以外の場合は、のみsetprecision(2)を使用して、フォーマッタは2桁の精度のみを表示するために科学的記数法を使用することを決定します。

ただし、出力に固定桁数を提供する必要があるため、提供したもの(fixedとの両方setprecision(2))がそれを実行します。

于 2012-08-09T14:39:46.447 に答える