2017-08-24 10 views
0

私は、小数点以下12桁までの精度を持つテキストファイルを持っています。だから私はこのatof()はdoubleの代わりにfloatを返します

void txt2vec(const std::string& file, std::vector<double>& data) 
{ 
std::string line; 
std::ifstream myfile(file); 
if (myfile.is_open()) 
{ 
    while (getline (myfile,line)) 
    { 

     std::cout << atof(line.c_str()) << std::endl; 
     //data.push_back(atof(line.c_str())); 
    } 
    myfile.close(); 
} 
} 

atofを書いたC++ VECへの数は、二重が、私はこれはプログラム

-0.0340206 
-0.0873645 
    0.0789533 
    0.115022 
    0.0809852 
    0.118469 
    0.113328 
    0.112746 
-0.0331071 
の出力であるフロート

を取得していますを返す必要がありますロードする

どこにあるべきか

-0.0340205617249 
    -0.0873644948006 
    0.078953281045 
    0.115022487938 
    0.0809852406383 
    0.118468873203 
    0.11332821846 
    0.112745501101 
    -0.0331071354449 
+2

'ostream :: operator <<(double)'はデフォルトで6桁の精度を出力します。 'std :: setprecision'も参照してください –

+0

いいえ、あなたは' float'の結果を得ていません。あなたは 'double'の結果を得ています。 –

+0

これは問題ではありませんが、 'std :: endl'が行う余分なものが本当に必要ですか? '' \ n ''は行を終わらせます。 –

答えて

1

予想される値を取得している可能性がありますが、表示されたコードで完全精度を印刷していません。

出力ストリームと倍音の演算子<<は、一般的な使いやすさと可読性のために、デフォルトの精度が6です。 std::ios_base::precisionを参照してください。あなたは、二重が含まれていてもよい桁数、例えば精度を設定する必要があり、完全な番号を表示したい場合は

std::basic_ios::initによって確立されたデフォルトの精度は、6

ですnumeric_limitsを使用してください。

std::cout << -0.0340205617249 << std::endl; // -0.0340206 
std::cout.precision(std::numeric_limits<double>::digits10 + 1); 
std::cout << -0.0340205617249 << std::endl; // -0.0340205617249 

std::setprecisionも参照してください。

関連する問題