C语言程序将由数字字符组成的字符串转换为10进制实数, 例如将"123.4567"转换为123.45670。 输出如下: 123.45670 0.12345 4567.00000
时间: 2024-12-20 21:15:54 浏览: 4
在C语言中,将数字字符串转换为十进制实数通常需要借助于`strtol`函数(处理整数部分)和`strtod`函数(处理小数部分)。以下是一个简单的示例代码片段:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double string_to_double(char *str) {
char *endptr;
double num = strtod(str, &endptr);
// 检查是否已读取完整串
if (endptr == str || *endptr != '\0') {
printf("Invalid number format.\n");
return -1.0; // 返回错误值
}
// 将尾随的0移除
while (*endptr == '0') {
endptr++;
if (*endptr == '.') break; // 如果遇到小数点,则停止
}
// 移除多余的空格或前导零
while (*(endptr-1) == ' ') endptr--;
// 添加额外的小数位,如果有的话
if (*endptr == '.') {
double fraction = 0.1;
for (int i = 1; endptr[i] != '\0'; i++) {
fraction *= 10;
num += fraction * (endptr[i] - '0');
}
}
return num;
}
int main() {
char str[] = "123.4567";
double result = string_to_double(str);
if (result != -1.0) {
printf("%.15f\n", result); // 控制输出精度,保留15位小数
}
return 0;
}
```
这段代码首先尝试将整个字符串转换成`double`类型的数值,然后检查是否有额外的非数字字符。如果有,它会返回错误。接着,通过循环处理小数部分,并移除多余的0和空格。最后输出转换后的结果。
注意:这个实现并不完美,对于某些特殊输入(如“0.”),它可能会出现问题。实际项目中应使用更复杂的方式来处理这类边界情况。
阅读全文