C ++解析字符串中的小浮点数

时间:2011-05-02 09:35:13

标签: c++ parsing

我希望我的代码从文件中读取参数。我在该文件中有这一行:

tol=1e-10

我使用atof将其解析为float:

double tol;
char * c = "1e-10"
tol=atof(c);

但是,它被解析为0而不是1e-10

编辑:事实证明它确实解析了,很抱歉打扰了你们。我忘了printf默认情况下不显示小值。自从我的一张支票冻结以来,我首先怀疑这一点。

4 个答案:

答案 0 :(得分:3)

此代码:

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

int main() {
    double d = atof( "1e-10" );
    cout << d << endl;
}

打印1e-10。

答案 1 :(得分:2)

您如何打印结果,确保在点之后有很多数字。这可能是一个舍入误差。

答案 2 :(得分:1)

问题在于std::atof()在发生错误时返回0,因此您无法区分两者。

由于这是一个C ++问题,为什么不使用流?像这样:

double get_tol(std::istream& is)
{
  std::string key;
  if( !is>>key || key!="tol" ) throw "You need error handling here!";
  char equal;
  if( !is>>equal || equal!='=' ) throw "You need error handling here!";
  double d;
  if( !is>>d )throw "You need error handling here!";
  return d;
}

答案 3 :(得分:0)

c转换为std::string并改为使用stringstream