精确度
#include <stdio.h>int main()
{
double a,n;
int c;
scanf("%lf",&a);
c=a*1000+0.5;
n=c/1000;
printf("%.3lf\n", n);
return 0;
}
/*
#include <stdio.h>
int main()
{
double num;
scanf("%lf",&num);
num=(int)(num*1000+0.5);
num=num/1000;
printf("%.3lf\n", num);
return 0;
}
*/
为什么第一种就不行,第二种可以? 不行指的是什么?可以指的又是什么?
提问题要把问题说清楚
sh-5.1$ ls
a.cb.c
sh-5.1$ cat a.c
#include <stdio.h>
int main()
{
double a,n;
int c;
scanf("%lf",&a);
c=a*1000+0.5;
n=c/1000;
printf("%.3lf\n", n);
return 0;
}
sh-5.1$ cat b.c
#include <stdio.h>
int main()
{
double num;
scanf("%lf",&num);
num=(int)(num*1000+0.5);
num=num/1000;
printf("%.3lf\n", num);
return 0;
}
sh-5.1$ gcc -g -Wall -o a a.c
sh-5.1$ gcc -g -Wall -o b b.c
sh-5.1$ ls
aa.c bb.c
sh-5.1$ ./a
1234
1234.000
sh-5.1$ ./b
1234
1234.000
sh-5.1$
int c;
. . . . . .
n = c/1000 ;// 这是整数除法, 1 / 2 = 0,误差来自这里
. . . . . .
得改成这样
n = c/1000.0 ;
页:
[1]