我希望我的代码从文件中读取参数。我在该文件中有这一行:
tol=1e-10
我使用atof
将其解析为float:
double tol;
char * c = "1e-10"
tol=atof(c);
但是,它被解析为0
而不是1e-10
。
编辑:事实证明它确实解析了,很抱歉打扰了你们。我忘了printf
默认情况下不显示小值。自从我的一张支票冻结以来,我首先怀疑这一点。
答案 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
。