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

      最近编写的程序需要从配置文本文件中扫描读取一些字符串、浮点类型的参数,使用了如下一句:
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函数进行针对转换,获得了准确的数据结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值