不用atof实现
时间: 2024-02-27 13:56:07 浏览: 23
如果不想使用标准库中的 `atof` 函数,可以自己编写字符串转浮点数的函数。以下是一个简单的实现:
```c
#include <stdio.h>
double str2double(char* str) {
double num = 0.0;
double sign = 1.0;
int point_flag = 0;
if (*str == '-') {
sign = -1.0;
str++;
}
while (*str != '\0') {
if (*str == '.') {
point_flag = 1;
str++;
continue;
}
int digit = *str - '0';
if (digit >= 0 && digit <= 9) {
if (point_flag) {
num = num + (double)digit / 10.0;
} else {
num = num * 10.0 + (double)digit;
}
}
str++;
}
return num * sign;
}
int main() {
char str[] = "-3.1415926";
double num = str2double(str);
printf("转换结果为:%lf\n", num);
return 0;
}
```
该函数首先判断字符串是否为负数,如果是则标记为负数,并将指针后移一位。然后遍历字符串中的每个字符,如果遇到小数点,则标记下来并将指针后移一位,否则将字符转换成对应的数字,并将其乘以 10 的幂次方加到结果中。如果遍历到小数点后面的数字,则将其转换成小数部分,并加到结果的小数部分中。最后将结果乘以标记位(正负号)即可。
需要注意的是,该函数并没有对输入的字符串做任何检查,如输入的字符串不是合法的浮点数字符串,可能会导致结果不正确或者程序崩溃。因此在实际使用中需要加入足够的字符串检查和错误处理。