因为实型和整型变量是不能直接比较的,要做一步类型转换才能比较首先要明确允许的误差是多少。比如一般情况误差的绝对值小于10-8时我们可以认为两个实数是相等的。
代码如下
#include
#include
main()
{
float b,c;
c=1;
while(c>=0) //如果输入小于0,就结束程序
{
scanf("%f",&c);
b=sqrt(c);
if (fabs(b-(int)b)<1e-8) printf("%.0f的开平方是个整数\n",c);
elseprintf("%.0f的开平方不是整数\n",c);
}
}
结果
如果这个数是n,一般如是if(n==(int)n) printf("It is a integer.\n"); else printf("It is not a integer.\n");判断就可以了。但这不100%准确,因为同一个整数用int表达和用double表达实际上是有差别的,所以当浮点数与整型数相差非常非常小时可能会误判。
if(fabs(x-(int)(x+0.5))<1e-5)printf("%d是一个整数",(int)(x+0.5));
这里把它与相应整数的差小于0.00001,就视为它就是一个整数。