强制类型转换double转int。从2.8转成3是什么情况

#include<stdio.h>
#include<math.h>
int main()
{
	int n,m;
	double s;
	printf("请输入一个数n:");
	scanf("%d",&n);
	while(n>=1000)
	{
		printf("输入错误,请重新输入一个整数n:");
		scanf("%d",&n);
	} 
		s=sqrt(n);
		if((int)s==s)
			printf("%d的平方根为整数,结果是%0.0lf",n,s);
		else
			printf("%d的平方根是%lf,不是整数,保留整数结果为%0.0lf",n,s=sqrt(n),s=(int)s);
}

为什么强制类型转化会将2.828427转换为3??

int 是整数,  你期待 2.8 会转换为什么样的整数你才满意呢? 

这跟浮点数的编码方式有关,默认情况下应该是向最接近的整数值舍入。

强制类型转化int是向下取整,输出那里改为

	printf("%d的平方根是%lf,不是整数,保留整数结果为%0.0lf",n,s,s=(int)s);

2.828427转换为2.,我也想知道为什么会有那么大的不同

改正一下,

printf("%d的平方根是%lf,不是整数,保留整数结果为%0.0lf",n,s=sqrt(n),a=(int)s);//再定义一个double a;

抱歉

刚刚测试了一下,发现输出的是double s,而不是int s。

printf("%d的平方根是%lf,不是整数,保留整数结果为%0.2lf",n,s=sqrt(n),s=(int)s);

改了那个保留的小数位数后,输出的是2.83,如果输出的是强制转化过的s,输出的应该是2.00才对,所以当小数位位数为0时,输出是经过四舍五入的,强制类型转化的值根本没有输出