刚学C语言,哪位帮个忙,谢谢!关于警告conversion from 'double' to 'float', possible loss of data

时间:2021-05-14 16:11:06
#include <stdio.h>
#include <math.h>
main()
{
float a,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
s= 1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);
printf("area=%7.2f\n",area);

}

当我输入3,4,6的时候,会有警告warning C4244: '=' : conversion from 'double' to 'float', possible loss of data。但是程序可运行。
但是如果我把1。0改为1,也会有警告,但是计算出来s=0,area=0.
为什么1。0改成1就不行了呢?我是VC6。0下运行的。
哪位可以帮忙下,谢谢!第一次发贴,还没什么分。抱歉了

4 个解决方案

#1


1应该是默认为整型计算了,结果就出来0了,1.0的浮点计算

#2


s=1.0/2*(a+b+c); 
这句,先算除法再算乘法,1.0/2将1.0、2转换到double执行除法,因此出现警告
warning C4244: '=' : conversion from 'double' to 'float', possible loss of data。
如果是1/2,直接按整数进行除法,得到0,再和后边(a+b+c)相乘,还是0

#3


晕,说错了,警告warning C4244: '=' : conversion from 'double' to 'float', possible loss of data。
是将乘法结果的double赋给s时发生的。
羞愧地走了。。。

#4


谢谢各位,终于懂了。

#1


1应该是默认为整型计算了,结果就出来0了,1.0的浮点计算

#2


s=1.0/2*(a+b+c); 
这句,先算除法再算乘法,1.0/2将1.0、2转换到double执行除法,因此出现警告
warning C4244: '=' : conversion from 'double' to 'float', possible loss of data。
如果是1/2,直接按整数进行除法,得到0,再和后边(a+b+c)相乘,还是0

#3


晕,说错了,警告warning C4244: '=' : conversion from 'double' to 'float', possible loss of data。
是将乘法结果的double赋给s时发生的。
羞愧地走了。。。

#4


谢谢各位,终于懂了。