float精度问题为什么咧?

tjjmmtds 2003-08-18 04:57:17
为何例一中编译器不会提示精度转换,而例二中却会?[VC编译器/test.cpp]

例一:
void main()
{
int i=9;
printf("%f",i);
}

例二:
/*一个小问题,为什么在查错时编译器说“ warning C4244: '=' : conversion from 'double' to 'float', possible loss of data”?*/
/*我这里最高精度就float,怎么会??*/

#include <stdio.h>
#define N 10
struct student
{
char num[6];
char name[8];
int score[4];
float avr;
}stu[N];

void main()
{
int i,j,max,maxi,sum;
float average;
for(i=0;i<N;i++)
{
printf("\nInput scorees of student %d:\n",i+1);
printf("NO.:");
scanf("%s",stu[i].num );
printf("name:");
scanf("%s",stu[i].name );
for(j=0;j<3;j++)
{
printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
average=0;
max=0;
maxi=0;
for(i=0;i<N;i++)
{
sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{
max=sum;
maxi=i;
}
}
average/=N;
printf("No.\tname\tscore1\tscore2\tscore3\taverage\n");
for(i=0;i<N;i++)
{
printf("%5s%10s",stu[i].num,stu[i].name );
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("%8.2f\n",stu[i].score);
}
printf("average=%6.2f\n",average);
printf("The highest score is :%s,score total:%d.",stu[maxi].name,max);
}
...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjjmmtds 2003-08-18
  • 打赏
  • 举报
回复
哦,这样啊,谢谢紫气和fireseed:))
playboyxp 2003-08-18
  • 打赏
  • 举报
回复
帮你up
pengzhenwanli 2003-08-18
  • 打赏
  • 举报
回复
刚才我试了一下。
第一个地输出根本就不对。
对于printf来说,后面的类型切忌和前面指定的不一样。对于内部表示来说,浮点和定点数根本不一样。
还有,给你个建议,你用VC的时候,不要把文件名存为.cpp这样会以C++编译器编译。
很多C的不是警告的错误,也会有警告错
fireseed 2003-08-18
  • 打赏
  • 举报
回复
ppm07(群) 所说有误

例一之所以没有警告是因为printf是不定参函数,后面的类型是可以任意的。
zeroman20 2003-08-18
  • 打赏
  • 举报
回复
up
tjjmmtds 2003-08-18
  • 打赏
  • 举报
回复
例二懂了,例一呢?虽然没有计算,但是精度以这种格式打出来没有问题?
angii 2003-08-18
  • 打赏
  • 举报
回复
line 36: stu[i].avr=sum/3.0;
编译器将3.0自动转换为double型变量,然后进行运算,所以得到的结果也是一个double型变量。如果将该句变成:
stu[i].avr=sum/(float)3.0;
即可通过
ppm07 2003-08-18
  • 打赏
  • 举报
回复
从int转到float不会导致精度丢失,编译器就没有报警。
而从float到double是从高精度到底精度,很可能导致精度丢失,编译器当然要报警了。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧