atof 到float 类型 精度损失
2018-12-26 本文已影响0人
天幕下悠悠
字符串转换为浮点数的函数,标准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! 问题解决。
---------------------
作者:geophoenix
来源:CSDN
原文:https://blog.csdn.net/geophoenix/article/details/7845731