1

10 個の要素の配列を宣言し、それを 0.0 .. 9.9 で初期化しました。その出力は 0.0 が 0 に変更されたことを除いて完全です。なぜそうなのですか?

#include <iostream>
using namespace std;
int main(void)
{
int const SIZE = 10;
double number[SIZE] = {0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9};
for(int i(0) ; i < SIZE ; i++)
{
        cout << number[i] << endl ;
}
system("PAUSE");
}

ありがとう、

output: 0 // 0 ではなく 0.0 にする必要があります // 1.1 2.2 . . . 9.9

4

5 に答える 5

6

「0.0」と「0」は、同じ数字を表す 2 つの数字です。Adoubleは数値1のみを格納します。元の数字は保存されません。

C++ プログラムのソース テキストに0.0やなどの数字が含まれている場合1.1、コンパイラはそれをその数字 (文字列) からdouble. このdouble形式は、元の文字列ではなく、数値のみを表します。したがって、ゼロインdoubleは単なるゼロです。「0」でも「0.0」でも「0.000」でもありません。double印刷するとき、元の数値が「0」なのか「0.0」なのかを印刷するソフトウェアが知る方法はありません。を印刷するためのルールに従ってそれを印刷するだけdoubleです。

デフォルトではdouble、ゼロの値は「0」として出力されます。別の方法で印刷したい場合は、I/O マニピュレータを使用して別の形式にするように依頼できます。たとえば、 の後#include <iomanip>、 を使用std::cout << std::setprecision(1) << std::fixed;して、浮動小数点出力形式を固定 (対科学) 形式の 1 桁に設定できます。次に、ゼロの値を印刷するdoubleと、「0.0」が生成されます。


1ただし、ゼロの場合doubleは +0 と –0 を区別できます (IEEE 754 が浮動小数点に使用される場合)。

于 2013-09-27T14:58:41.933 に答える
1

0 ではなく 0.0 を出力する必要がある場合は、#include <iomanip>

于 2013-09-27T14:59:46.990 に答える
1

通常の形式では、ほとんどの場合、できるだけコンパクトな表現が使用されます。2 進浮動小数点数は正規化されているため、末尾の数字を表しません。追加の小数位置が必要な場合は、次のフラグを使用することをお勧めします。

std::cout << std::fixed << std::setprecision(1);

プログラム全体は次のようになります。

#include <iomanip>
#include <iostream>

int main()
{
    int const SIZE = 10;
    double number[SIZE] = {0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9};
    std::cout << std::fixed << std::setprecision(1);
    for(int i(0) ; i != SIZE ; ++i)
    {
        std::cout << number[i] << '\n';
    }
    std::cin.ignore();
}
于 2013-09-27T15:03:25.840 に答える