我正在尝试创建一个代码,用于检查用户输入是否为float。这就是我所拥有的:
while (ceil(var1) == var1 || ceil(var2) == var2) {
printf("Not float \n");
printf("enter float: ");
scanf("%f,%f", var1, var2);
var1 = *num1;
var2 = *num2;
}
这有点用,但如果我输入类似:2,3
的内容,它就不会接受这个浮动。
答案 0 :(得分:1)
您试图确定的是浮点变量是否具有小数部分(或者float
输入是否可以精确地表示为整数)。
输入是浮动还是不是
这没有任何意义,float
变量总是float
。
比较浮点值的相等性总是有问题的。您通常必须测试两个值之间的差异是否小于某些任意小但可表示和可接受的错误限制。例如:
fabs(ceil(var1) - var1)< FLT_EPSILON
您可以尝试使用modf()
,但可能会遇到同样的问题。
双重部分;
double fractpart = modf(var1,& intpart);
if(fabs(fractpart)< FLT_EPSILON)
{
//没有小数部分
}
请注意,C数学库是为double
而不是float
定义的。在许多情况下,隐式转换是安全的,但不能传递modf()
的指针参数。