c语言中conversion from 'double ' to 'int ', possible loss of data

各位大佬,求指教
#include<stdio.h>
int main()
{
int a,b,c,sum,d;//a是存款金额,b是存款期限
sum=0;
printf("Please input benjin,cunqi: ");
scanf("%d,%d",&a,&b);
if(b==1)
sum=(double)a*0.0315;
if(b==2)
{
for(c=1;c<=2;c++)
{d=(double)a*0.0363;
sum=(double)sum+(double)d;}
}
if(b==3)
{
for(c=1;c<=3;c++)
{d=(double)a*0.0402;
sum=(double)sum+(double)d;}
}
if(b==5)
{
for(c=1;c<=5;c++)
{d=(double)a*0.0469;
sum=(double)sum+(double)d;}
}
if(b==8)
{
for(c=1;c<=8;c++)
{d=(double)a*0.0536;
sum=(double)sum+(double)d;}
}
printf("\nlixi = %f yuan",(double)sum);
return 0;
}

这是我的程序,这个程序没有错误但是有九个警告,我已经能运行,并且结果无误,但是因为考试的原因,,有这些警告会判错,,
具体的警告是在
sum=(double)a*0.0315;
d=(double)a*0.0363;
sum=(double)sum+(double)d;
这些他提示我从double转换到int会出现错误
conversion from 'double ' to 'int ', possible loss of data
求各路大佬教我一下。

你前面声明 了 sum 和 d 是 int 型。
sum=(double)a*0.0315; 尽管你 用了 (double) 强制转换,但结果会转回 int 型,赋给 sum; 这样,小数点一下数值全都略去了。带来误差。另外,如果 a 数值较大,a*0.0315 超出 int 型 允许的最大值,那么数会超界 变负数,也带来误差。
d 也有同样问题。
你应当 改用 double 型。相应的输入输出格式 用 %lf。
当然,如果 你的结果 都正确,说明数值范围恰好满足 既无小数,也没超界,那么你可以加上 (int) ...; 例如:
sum= (int)( (double)a*0.0315);
d= (int) ( (double)a*0.0363 );
sum = sum + d;
这样就没有警告信息了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-08
你把a、sum、d都定义为double型,就可以了。输出格式用%.f
相似回答