2017-09-27 13 views
2

double値を取得するためにadd関数を使用し、別のdouble値を加算して答えを得ようとしています。私はgetメソッド/関数を使って答え値を取得します。答えの値はintで表示され、doubleでは表示されません。例えば同じように、12.0 + 10.0は22.0に等しいですが、私は結果を表示したときにのみ、このコードの結果は22 何ですかdouble値intとして出力する

double x = 0.0; 
void addValue(double value) 
{ 
    x = value + x; 
} 

double getValue() 
{ 
    return x; 
} 
int main() 
{ 
    addValue(12.0); 
    addValue(10.0); 
    cout << getValue() << endl; 
    return 0; 
} 

...ここに22.は、私が働いているコードであると言います私は取得しようとしている22.0

私はこれを固定精度を使用することなく修正することができますか?

+0

#include <iomanip>から 'iomanip'ヘッダが[てSetPrecision(http://en.cppreference.com/w/cpp/io/manip/setprecision)を有しています。精度を設定する方法や、 'setprecision'を使わないでどうするのかを尋ねることはできません... – Jonesinator

+0

@Jonesinator setprecisionを使わずにしようとしています – Nicole

+0

なぜですか?それがまさにそれのためのものです。 – Jonesinator

答えて

1

coutは、小数点以下の端数が0の場合は切り捨てます.12.5などの小数点以下の小数点以下を切り捨てて出力してください。したがって、.0の値を印刷する必要がある場合は、setprecisionを使用するか、printfを使用する必要があります。

よりよく理解するために、あなたはこの質問 How do I print a double value with full precision using cout?

+1

それは数を制限する 'std :: cout'数字。これはストリーム挿入子( '<<'演算子)です。 **任意の**出力ストリームで同じことが分かります: 'std :: ofstream out(" demo.txt "); out << 12.0 << '\ n'; '。 –

0

あなたが精度を設定するのstd ::てSetPrecisionを使用することができて従うことができますが、それが唯一の精度を設定するための重要な(意味の)数字を維持します。この特定のケースでは、22.0では0は重要ではありません。ですから実際に22.0を印刷したいのであれば、固定精度を設定する必要があります。コードは次のようになります。

#include <iostream> 
#include <iomanip> 
using namespace std; 

double x = 0.0; 
void addValue(double value) 
{ 
    x = value + x; 
} 

double getValue() 
{ 
    return x; 
} 
int main() 
{ 
    addValue(12.0); 
    addValue(10.0); 
    cout << fixed <<std::setprecision(1) << getValue() << endl; 
    return 0; 
} 
1

使用std::setprecision

std::cout << std::setprecision (15) << getValue() << std::endl; 
関連する問題