字符串转换成double类型数字

#include<stdio.h>
 
#include<math.h>
 
typedefint bool;
 
#define true1
 
#define false0
 
#define MAXIMUM1.7E+308 
 
//#define MINIMUM1.7E-308
 
double stol(constchar *str)
 
{
 
    bool sign=false;
 
    bool hasPoint=false;
 
    double valueBeforePoint=0.0;
 
    double valueAfterPoint=0.0;
 
    int deCount=0;
 
    //如果输入字符串的地址错误或者为空字符串
 
    if(str==NULL||str[0]=='\0')
 
    {
 
        printf("invalid parameter!\n");
 
        return 0;
 
    }
 
    int i=0;
 
    for(;str[i]!='\0';i++)
 
    {
 
        //判断第一个字符是否为符号
 
        if(i==0&&(str[0]=='-'||str[0]=='+'))
 
        {
 
            if(str[0]=='-')
 
                sign=true;
 
        }
 
        else
 
        {
 
           //if(hasPoint==false&&i!=0&&str[i]=='.'&&hasSign)
 
            //判断是否有小数点,删除三种情况:
 
           //1.已经找到了一个小数点;
 
           //2.str[0]不能为小数点;
 
            //3.需要区分字符串的首个字符是否是正负号,如果有正负号,那么str[1]不能为小数点,否则可以。
 
            if(hasPoint==false&&i!=0&&str[i]=='.'&&(str[0]!='-'||str[0]!='+'))
 
                hasPoint=true;
 
            else
 
            {
 
                if('0'<=str[i]&&'9'>=str[i])
 
                {
 
                    if(hasPoint==false)
 
                    {
 
                        valueBeforePoint=valueBeforePoint*10+str[i]-'0';
 
                       if(valueBeforePoint>MAXIMUM)
 
                        {
 
                            printf("out of range!\n");
 
                           return 0;
 
                        }
 
                    }
 
                    else
 
                    {
 
                        valueAfterPoint=valueAfterPoint*10+str[i]-'0';
 
                        deCount++;
 
                    }
 
                }
 
                else
 
                {
 
                    printf("Input string isn't a double !\n");
 
                    return 0;
 
                }
 
            }
 
        }
 
    }
 
    //最终返回值为小数点前面的值加上小数点后面的值
 
    valueBeforePoint=valueBeforePoint+valueAfterPoint/pow(10,deCount);
 
    return sign?(-1*valueBeforePoint):valueBeforePoint;
 
}
 
int main()
 
{
 
/*
 ""           -->invalid parameter!//无效的参数
 "-1234.0001" -->-1234.0001 //带有符号的正常浮点数
 "+124." -->124             //结尾是小数点的字符串
 "cab124" -->0              //字符串开头为字母
 "12a23" -->0               //字符串既有数字又有字母
 "123.234" -->123.234       //无符号的浮点数
 "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"-->out of range!
*/
 
   char str[7][1000]={"","-1234.0001","+124." ,"cab124","12a23","123.234","111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"};
 
    int i=0;
 
    for(;i<7;i++)
 
    {
 
        double valueOfStr=stol(str[i]);
 
       if(valueOfStr>0.0000001||valueOfStr<-0.0000001)//如果返回值不为0,即没有出现某种错误,那么就输出valueOfStr
 
            printf("%f\n",valueOfStr);
 
    }
 
    return 0;
 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值