常用到字符串转化为浮点数据的函数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;
}

感觉有点庞大,没想到有更好的方法,大家帮忙想一想办法吧。
另外我还在编一个浮点数据转化为字符串的函数,也出出点子吧。
相信有些想程序文件或者动态库文件减肥的都感兴趣,[em3]