h-b-z-d-j-s-m 发表于 2022-11-10 16:46:34

精确度

#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;
}
*/
为什么第一种就不行,第二种可以?

人造人 发表于 2022-11-10 16:54:59

不行指的是什么?可以指的又是什么?
提问题要把问题说清楚

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$

jackz007 发表于 2022-11-10 17:07:44

      int c;
. . . . . .
      n = c/1000 ;// 这是整数除法, 1 / 2 = 0,误差来自这里
. . . . . .
               得改成这样
      n = c/1000.0 ;
页: [1]
查看完整版本: 精确度