fscanf直接获取浮点数误差问题及解决

来源:互联网 发布:mysql 时间加1秒 编辑:程序博客网 时间:2024/06/12 21:39

      最近编写的程序需要从配置文本文件中扫描读取一些字符串、浮点类型的参数,使用了如下一句:
fscanf(stream, "%s , %f\n", strPara,&f);
      在实际应用中发现strPara结果正常,f获取则有误差,例如配置文本文件中明明是8.40000的数值,直接执行后f获得的是8.39999,误差虽小但在精确数据应用场合这种情况显然不利。
      问题出现原因应该与C语言中浮点数表示精度误差有关。解决方法自有多种,有网友提出用C++的fstream进行流输入输出,在全新设计的程序中应该是很好的解决之道。自己的情况是在已有多行读入读出代码情况下改进,保留fscanf更现实一些,因此采用了稍微迂回的解决之道,改进代码如下
fscanf(stream, "%s , %s\n", strPara, strValue);
f = atof(strValue);      
      根据字符串扫描准确的情况将数据段先分割保存到字符串strValue,再利用atof函数进行针对转换,获得了准确的数据结果。

原创粉丝点击