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



/**
  * @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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值