现在的位置: 首页 > 综合 > 正文

字符串转换为浮点数时如何避免精度损失

2013年08月29日 ⁄ 综合 ⁄ 共 394字 ⁄ 字号 评论关闭

字符串转换为浮点数的函数,标准C提供的函数是atof(char *),C++ Builder 提供了一个函数 StrToFloat(AnsiString *),但是如果你直接定义一个浮点数变量,将字符串转换为单精度浮点数的话,很容易出问题,出现精度误差,下面给出一个简单的例子

char *strDemo ="0.00100";

float fDat;

fDat = atof(strDemo);

ShowMessage(fDat);

上面代码的运算结果为:0.00100000004749475,存在明显的转换误差。

仔细看了一下字符串转换为浮点数的函数定义:double atof(const char *s);

atof()函数的返回值类型是double类型的,如果将其赋值为一个单精度的浮点数,肯定存在精度损失,找到了原因所在,将上面代码中的float修改成double,编译运行,显示结果为0.001。

OK! 问题解决。

抱歉!评论已关闭.