您的位置:首页 > 其它

【小折腾--C】字符串转浮点型

2015-09-21 14:57 344 查看
/**

* @brief: 从ptr开始扫描字符串,过滤到前面的空格,直到数字或者“+”、“-”号,

* 才开始转换。如果遇到非数字以及字符串结束符'\0'时,结束转换。

* ptr字符串包含,正负号、数字或者E(e)标示指数部分,如123.456或者123e-2

* @argument: _ptr,需要转换的字符串

* @return: 转换后的浮点型数

*/

double myatof(const char* _ptr)

{

double fVal = 0.0, fPower = 1.0;

if(!_ptr)

return fVal;

// 过滤空格

int i = 0;

for(; isspace(_ptr[i]); ++i);

// 处理+-

int nSign1 = (_ptr[i] == '-') ? -1 : 1;

if( (_ptr[i] == '+' ) || (_ptr[i] == '-') )

++i;

// 处理 小数点前

for(; isdigit( _ptr[i] ); ++i)

fVal = fVal * 10 + (_ptr[i] - '0');

// 处理 小数点

if(_ptr[i] == '.')

++i;

// 处理 小数点前

for(; isdigit( _ptr[i] ); ++i)

{

fPower *= 10;

fVal = fVal * 10 + (_ptr[i] - '0');

}

fVal = fVal / fPower;

// 处理e 指数

if((_ptr[i] == 'E') || (_ptr[i] == 'e') )

{

double fVal2 = 0.0;

int nSign2 = (_ptr[++i] == '-') ? -1 : 1;

if( (_ptr[i] == '+' ) || (_ptr[i] == '-') )

++i;

for(; isdigit( _ptr[i] ); ++i)

fVal2 = fVal2 * 10 + (_ptr[i] - '0');

if(nSign2 == 1)

fVal = fVal * pow(10, fVal2);

else

fVal = fVal / pow(10, fVal2);

}

return fVal;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: