atof()返回浮动而不是双重

问题描述:

我有文本文件包含精度高达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

+0

不,你没有得到'float'结果,你会得到一个'double'结果。 –

+0

这不是问题,但是你真的需要'std :: endl'做的额外的东西吗? ''\ n''结束一行。 –

您可能会得到期望的值,但是您没有在所显示的代码中打印完整精度。

用于输出流和双精度的<<运算符的默认精度为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