WinCE 6.0下字符串转换为浮点数

float myatof(TCHAR * str) //输入的是一个以NULL结尾的字符串指针

{

     float fRes=0;//整数部分

     if(str) //指针不为空

     {

         float fDemic=0;//小数部分

         int nDecimalCount=1;//小数位数*10

         int nLen=_tcslen(str);//总共长度

         if(nLen>30)

              nLen=30; //再多位数考虑没有意义故从30位截

         BOOL bExponential=FALSE;//是否科学记数法的指数E

         BOOL bHaveradixpoint=FALSE;//是否有小数点, 并且控制只能有一个

         BOOL bIsNegative=FALSE;//是否负数

         double  nEcount=0;//e后面的10的幂次值

         for(int n=0;n<nLen;n++)

         {

 

              int nValue=str[n]-_T('0');//是否为数字

              if(nValue<0 || nValue>9)

              {

                   nValue=-1;

              }

              if(nValue!=-1)//如果是数字

              {

                   if(!bExponential)//如果不是科学计数法

                   {

                       if(!bHaveradixpoint)

                       {

                        fRes=fRes*10+nValue;

                       }

                       else

                       {

                            fDemic=fDemic*10+nValue;

//不采用下面的方法,是/10+3/100!=0.23

                            //float ftemp=nValue;

                            // fRes=fRes+ftemp/nDecimalCount;;

                            //所以采用/100,它也不一定等于.23但确保等于.29-0.2999之间。

                             nDecimalCount*=10;

                       }

                   }

                   else//是指数

                   {

                      nEcount=nEcount*10+nValue;

                   }

 

              }

              else//如果不是数字

              {

                   if(str[n]==_T('E') || str[n]==_T('e'))

                   {

                       if(bExponential)//已经有一个E

                            break;

                       bExponential=TRUE;

                   }

                   else if(n==0 && str[n]==_T('-'))//如果是"-"号,并且只能在第一位

                   {

                       bIsNegative=TRUE;

                   }

                   else if(str[n]==_T('.'))

                   {

                       if(bHaveradixpoint==FALSE)

                       {

                            bHaveradixpoint=TRUE;

                       }

                       else

                       {

                            break;

                       }

                      

                   }

                   else//其它各种符号都返回

                   {

                      break;

                   }

              }

         }//for

         fRes=fRes+fDemic/nDecimalCount;

         fRes*=pow((double)10,nEcount);

         if(bIsNegative)

         {

              fRes*=-1;

         }

     }

     return fRes;

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值