字符串转化为浮点数据的函数

常用到字符串转化为浮点数据的函数atof
但编译之后需要带一个很大的运行库,于是自己编了一个:

#define IsDigit(c) ((c) >= TEXT('0') && (c) <= TEXT('9'))

//将字符串转换成浮点数据,返回成功转换的字符数
int WINAPI ToDouble(LPCTSTR lpString, double *value)
{
int nStrLen, nStart, nEnd, nPos, sign = 1, n, flag = 1;
double radix;

nStrLen = lstrlen(lpString);
//找到第一个数字位置
for(nPos = 0, *value = 0; nPos < nStrLen && !IsDigit(lpString[nPos]); nPos++);
if(nPos == nStrLen) return 0;
nStart = nEnd = nPos;
if(nStart > 0)
{
if(lpString[nStart-1] == TEXT('.'))
{
nStart--;
flag = 0;
if(nStart > 0 && lpString[nStart-1] == TEXT('-'))
{
nStart--;
sign = -1;
}
}
else if(lpString[nStart-1] == TEXT('-'))
{
nStart--;
sign = -1;
}
}
//找到连续的最后一个数字位置
for(; nPos < nStrLen && IsDigit(lpString[nPos]); nPos++);
if(flag)
{
for(radix = 1, n = nPos - 1; n >= nEnd; n--)
{
*value += (lpString[n] - TEXT('0')) * radix;
radix *= 10;
}
nEnd = nPos -1;
if(nPos < nStrLen-1 && lpString[nPos] == TEXT('.') && IsDigit(lpString[nPos+1]))
{
nPos++;
nEnd = nPos;
for(; nPos < nStrLen && IsDigit(lpString[nPos]); nPos++);
for(radix = 0.1, n = nEnd; n < nPos; n++)
{
*value += (lpString[n] - TEXT('0')) * radix;
radix *= 0.1;
}
nEnd = nPos -1;
}
}
else
{
for(radix = 0.1, n = nEnd; n < nPos; n++)
{
*value += (lpString[n] - TEXT('0')) * radix;
radix *= 0.1;
}
nEnd = nPos -1;
}
*value *= sign;
return nEnd - nStart +1;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值