warning C4305: 'initializing' : truncation from 'const double' to 'float'是什么意思

#include <stdio.h>
void main()
{
float area,pi=3.14159;
int r;
for(r=1;r<=10;r++)
{
area=pi*r*r;
if(area>100)break;
printf("r=%f,area=%f\n",r,area);
}
结果哪儿错了,谢谢!!!!!!!!1

你在试图把一个const double转成float
错误不是double不能转成float
而是你转了以后这个变量就不是const,这样就可以被修改了
编译器是不可能允许这种情况出现的
所以你要么去掉那个const的定义,要么在你的float前加个const
orz,我没看前面的,因为通常情况下只有人问error的,没想到LZ居然是在问warning
因为很早开始就不在意warning了,反正现在已经很明确自己在做什么

顺便, _鈊_烦_薏乱你的说法应该也是不对的吧?
初始化的时候应该不会报这个warning的
这个warning的产生在于pi*r*r
这个东西返回是个double,而area是float,可能产生结果过大,float无法表示的情况
所以建议LZ把area定义为double
当然,如果LZ确定你算的面积float可以表示的话,那么就不需要用double
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-11
pi=3.14159
这里,其实只是一个警告,你可以这么写:
pi = 3.14159f;
这样就告诉编译器是float了。
这个数的大小是不越届的。

主要原因是3.1415被视为常量,实际上用来初始化变量是可以的,所以楼上二位基础不够过关吧。
第2个回答  2008-06-11
不能将const double类型的值直接赋予float类型变量本回答被提问者采纳
第3个回答  2012-06-23
#include <stdio.h>
void main()
{
float area,pi=3.14159;
int r;
for(r=1;r<=10;r++)
{
area=pi*r*r;
if(area>100)break;
printf("r=%f,area=%f\n",r,area);
}
} //我运行了你的源代码,发现是差一个“}”,加上就OK了!
相似回答