首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >atof()返回浮动而不是双倍

atof()返回浮动而不是双倍
EN

Stack Overflow用户
提问于 2017-08-24 15:08:41
回答 1查看 465关注 0票数 0

我有文本文件,里面的数字精确到小数点12位。

因此,为了将数字加载到c++ vec中,我编写了以下代码

代码语言:javascript
复制
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应该返回一个双倍,但我得到了浮动

这是程序的输出。

代码语言:javascript
复制
 -0.0340206
 -0.0873645
  0.0789533
  0.115022
  0.0809852
  0.118469
  0.113328
  0.112746
 -0.0331071

虽然它应该在哪里

代码语言:javascript
复制
  -0.0340205617249
  -0.0873644948006
   0.078953281045
   0.115022487938
   0.0809852406383
   0.118468873203
   0.11332821846
   0.112745501101
  -0.0331071354449
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-24 15:17:56

您可能得到了预期的值,但是没有在所示代码中打印全部精度。

对于一般用途和可读性,用于输出流和双倍的<<操作符的默认精度为6。见std::ios_base::precision

std::basic_ios::init确定的默认精度为6。

如果您想要显示完整的数字,您需要用双倍可能包含的数字数来设置精度,例如使用numeric_limits

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45865109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档