質問

私はSETWとSETPRECISION機能を学んでいるので、これまでに試してきたことがありますが、いくつかの質問があります。

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    float y = 1.25;

    cout << fixed << setw(10) << setprecision(2) << y << endl;

    cout << "\n\n\nx\n";

    float x = 213565544.4826;
    cout << fixed << setw(13) << setprecision(3) << x << endl;
    cout << fixed << setw(14) << setprecision(3) << x << endl;
    cout << fixed << setw(15) << setprecision(3) << x << endl;
    cout << fixed << setprecision(3) << x;

    cout << "\n\n\nz\n";

    float z = 213565544.4826;
    cout << setw(11) << setprecision(1) << x << endl;
    cout << fixed << setw(12) << setprecision(1) << x << endl;
    cout << fixed << setw(11) << setprecision(1) << x << endl;
    cout << setw(12) << setprecision(1) << x << endl;

    cout << "\n\n\nm\n";

    float m = -344.275;
    cout << fixed << setprecision(1) << x << endl;
    cout << fixed << setw(8) << setprecision(1) << x << endl;
    cout << fixed << setw(7) << setprecision(1) << x << endl;
    cout << fixed << setw(6) << setprecision(1) << x << endl;

    return 0;
}

入力は次のとおりです。

      1.25



x
213565552.000
 213565552.000
  213565552.000
213565552.000


z
213565552.0
 213565552.0
213565552.0
 213565552.0



m
213565552.0
213565552.0
213565552.0
213565552.0

だから、今私の質問は次のとおりです。

1)なぜ最初の場所で「固定」を使用するのですか?

この例を見ると:

cout << setw(11) << setprecision(1) << x << endl;
cout << fixed << setw(11) << setprecision(1) << x << endl;

彼らは同じ値を出力しますが、固定は実際に何が変わるのでしょうか?

2)SetWは負の数に対してどのように機能しますか?

mの最後の例で。結果はすべての例で同じですが、setwでサインは何を変えますか?

213565552.0
213565552.0
213565552.0
213565552.0

これらの数字はどこから来ていますか? mの値は、出力されたものとはまったく異なります。

3)数字は1か所ですか?

たとえば、番号1.23とSETW(10)があります

前に6つのスペースがあり、次に1.23があります(ドットが1としてカウントされるため)。本当?

4)SetPrecisionがSetWとともに使用されるのはなぜですか?使用されていないのに0000が表示されるのはなぜですか?フロートが処理できるほど多くの0を表示しますか?

5)なぜxの値があるのか

213565552.000
 213565552.000
  213565552.000
213565552.000

x = 213565544.4826の場合。

数字44.4826はどこで迷子になりますか?

役に立ちましたか?

解決

これらは1つではなく5つの質問のようです。ともかく:

  1. std::fixed この表記法がより適切である科学表記法を使用するのではなく、常に固定点形式が必要であることを示すために使用されます。合理的に値を表すために必要な多くの数字がある場合、フォーマットは使用を切り替えます x.yyyyyyEee (あなたは常に科学形式を使用して使用するように依頼することができます std::scientific).
  2. std::setw() どの値がフォーマットされているかは気にしません!値がフォーマットされ、正の存在がある場合 out.width() セット、出力はパッド入ります out.fill() 少なくともキャラクター out.width() 幅の広い文字。出力がより大きい場合 out.width() とにかく、パディングは発生しません。各出力操作の後[かかります out.width() 考慮に入れる out.width() にリセットされています 0 (他のすべてのフォーマットオプションは自動的にリセットされません)。
  3. 象徴、数千のセパレーター、小数点などを含む幅にカウントされます。小数点は精度にカウントされません。 out.precision() わずかな数字の数(for std::fixed フォーマット)または非exponentの数字の数( std::scientific フォーマット)。
  4. 幅は、出力によって満たされる文字の数であり、精度は生成される[分数]数字の数を指定します。
  5. バイナリの浮動小数点値は、小数点以下の数字を表すことができます( float 通常6です。使用して安全に使用できる数桁数を確認できます std::numeric_limits<float>::digits10)。それ以上の数字を使用しようとすると、小数値を処理するときにバイナリ値を処理する場合、おそらく予期しない出力が発生する可能性があります。 std:numeric_limits<float>::digits 場所)。あなたは見たいかもしれません すべてのコンピューター科学者が浮動小数点算術について知っておくべきこと.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top