这是我的代码 -
#include <stdio.h>
double atof(char s[]); // This will convert string to double
int main(){
char str[] = "3.14159265359";
double d = atof(str);
printf("%lf\n", d);
return 0;
}
double atof(char s[]){
int i, frac = 0; // frac is for checking that s[i] is now after precision
double n = 0.0, j = 1.0;
for(i = 0; s[i] != '\0'; i++){
if(s[i] != '.' && frac == 0){
n = n*10 + (s[i] - '0');
}
else{
if(s[i] != '.'){
j *= 10.0;
printf("%lf\n", ((double)(s[i] - '0') / j));
n = n + ((double)(s[i] - '0') / j);
}
frac = 1;
}
}
return n;
}
输入:3.14159265359
输出:3.141593
为什么会这样?
答案 0 :(得分:1)
尝试使用
printf("%.11f\n", d);
使用语法%.xf
,您可以指定要打印的小数位数(x
)。
答案 1 :(得分:0)
因为C语言标准为%f转换说明符指定如果“精度丢失,则将其视为6”。