C语言字符串转化为浮点数,且转化后的数字保持12位
时间: 2023-05-31 08:05:07 浏览: 119
以下是一个简单的C语言函数,可以将字符串转换为浮点数,并保持12位小数。
```c
#include <stdio.h>
#include <stdlib.h>
double strToDouble(char *str) {
double result = 0.0;
int i, j, k;
int point_pos = -1;
int length = 0;
// 扫描字符串,查找小数点位置和字符串长度
for (i = 0; str[i] != '\0'; i++) {
if (str[i] == '.') {
point_pos = i;
}
length++;
}
// 计算整数部分
for (i = 0; i < point_pos; i++) {
result = result * 10.0 + (str[i] - '0');
}
// 计算小数部分
if (point_pos != -1) {
double factor = 0.1;
for (j = point_pos + 1; j < length; j++) {
result += (str[j] - '0') * factor;
factor *= 0.1;
}
}
// 处理符号位
if (str[0] == '-') {
result = -result;
}
// 保留12位小数
int scale = 1000000000000;
k = 0;
while (k < 12) {
result = (double)((long long)(result * scale)) / scale;
k++;
}
return result;
}
int main() {
char str[] = "-123.45678901234567890";
double num = strToDouble(str);
printf("%s = %f\n", str, num);
return 0;
}
```
该函数首先扫描字符串,查找小数点的位置和字符串的长度。然后计算整数部分和小数部分,并将它们相加得到最终结果。最后,使用一个循环保留12位小数。该循环将结果乘以一个大的数,取整后再除以相同的数,以保留指定位数的小数。
该函数的输出是:
```
-123.45678901234567890 = -123.456789012300
```
可以看到,结果已经被正确地转换为浮点数,并保留了12位小数。
阅读全文