为啥强制转换来判断一个数是否含有小数,在某些情款失效

为什么强制转换来判断一个数是否含有小数,在某些情款失效?
我们学校的OJ平台上的一道题目,要求实现输入一个小数,输出他的最简分数
#include <stdio.h>
#include <math.h>
int main()
{
int m ,min, z, temp;
double num;
while(scanf("%lf",&num)!=EOF)
{
for(m = 1;num!=(int)num;m*=10)
{
num*=10;
}
z = (double)num;
if(m > z)
min = z;
else
min = m;
for(temp = min;temp > 1;temp --)
{
if(z%temp==0&&m%temp==0)
break;
}
printf("%d/%d\n",z/temp,m/temp);
}
return 0;
}为啥强制转换来判断一个数是否含有小数,在某些情款失效
判断是否为整数的那块为什么当输入0.111,乘到111时判断不出来是否是整数(判断整数不一直用这个方法)?另外为什么111.000000后面还带有一个1,这要怎么解决?
------解决思路----------------------
这个问题不要用浮点型。
直接读入字符串,然后记录小数点的位置,删掉小数点,剩下的部分作为分子,根据小数点位置生成分母。
浮点数经常有误差,不适合这种操作。
------解决思路----------------------
http://img.my.****.net/uploads/201301/04/1357276191_5263.jpg