2017-08-24 63 views
0

我有文本文件包含精度高達12位小數的數字。atof()返回浮動而不是雙重

所以要數加載到一個C++ VEC我寫這

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應該返回一個雙但我正在逐漸浮

這是程序的輸出

-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