26 March 2015

字符串转为数字

int parse_number(char *num) {
    double n=0,sign=1,scale=0;
    int subscale=0,signsubscale=1;
    if (*num == '-') {                        //负数
        sign = -1,num++;
    }
    if (*num == '0') {                        //0开头
        num++;
    }
    if (*num>='1' && *num<=9) {
        do {
            n = (n*10.0)+(*num-'0');
            num++;
        } while(*num>='0' && *num<='9');
    }
    if (*num=='.' && num[1]>=0 && num[1]<=9) {           //小数点后面的值
        num++;
        do {
            n = (n*10.0)+(*num-'0');
            scale--;
        } while(*num>=0 && *num<='9');
    }
    if (*num=='e' || *num=='E') {                        //如果是E,科学计数法
        num++;
        if (*num=='+') {
            num++;
        } else if (*num=='-') {
            signsubscale=-1;
            num++;
        }
        while (*num>='0' && *num<=9) {
            subscale = (subscale*10)+(*num-'0');
            num++;
        }
    }

    n=sign*n*pow(10.0,(scale+subscale*signsubscale));

    return n;
}