鱼C论坛

 找回密码
 立即注册
查看: 2684|回复: 2

精确度

[复制链接]
发表于 2022-11-10 16:46:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
}
*/
为什么第一种就不行,第二种可以?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-10 16:54:59 | 显示全部楼层
不行指的是什么?可以指的又是什么?
提问题要把问题说清楚
sh-5.1$ ls
a.c  b.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
a  a.c        b  b.c
sh-5.1$ ./a
1234
1234.000
sh-5.1$ ./b
1234
1234.000
sh-5.1$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-10 17:07:44 | 显示全部楼层
        int c;
. . . . . .
        n = c/1000 ;  // 这是整数除法, 1 / 2 = 0,误差来自这里
. . . . . .
               得改成这样
        n = c/1000.0 ;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 08:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表