为什么只显示6个数字虽然是双倍的?

时间:2014-03-13 21:04:34

标签: c double precision

这是我的代码 -

#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

为什么会这样?

2 个答案:

答案 0 :(得分:1)

尝试使用

printf("%.11f\n", d);

使用语法%.xf,您可以指定要打印的小数位数(x)。

答案 1 :(得分:0)

因为C语言标准为%f转换说明符指定如果“精度丢失,则将其视为6”。