C语言 如何判断一个浮点数是不是整数(说法不太严格)

如题所述

C语言里浮点数和整数的操作和表示都不相同,这种说法很不严格,所以如何判断,就看你自己的定义啦。

我的理解是,如果一个浮点数可以分为整数部分和小数部分,那么你想判断一个浮点数是不是跟它的整数部分基本相同,严格一点说就是误差很小。这样的话,你可以这么写:
double err = 1e-10; //先自己定义误差

x = 2.9999999997;
if (abs(int(x)-x)< err) // 和它整数部分误差的绝对值是否小于规定的误差

...
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-06
假如a是浮点数,再定义一个整型变量int b=a;再定义一个float c=a/b,假如c=1则浮点数a是整数
第2个回答  2014-10-29
#include <math.h>
//a可以是float、double、long double型
if (floor(a) == a)
{
    //a是浮点数但里面存的可以看做是整数
}
else
{
    //a是浮点数
}

第3个回答  2013-02-06
c语言里数字输入输出的时候都有确定它的类型的啊,不用判断的.
如果你指的是那种直接给你的一个数的话,那是不确定的,比如2.0可以确定它是浮点数,但是2就不确定了,,可能是浮点数,也可能是整形的,看你定义的时候是怎么定义的了
第4个回答  2020-04-10
无论是通过sizeof查看字节数(int和float占用字节数相同),还是做float转换为int然后相除判断是否等于1(int转为float可能尾数丢失),或者是sprintf转化为字符串去检查是否有小数点(int会转换为float,导致有小数点出现),都有问题。
以字符读入数,挨个字符判断,检查到有小数点且所有字符在字符‘0’到‘9’之间,且小数点后不超过6位可以判为float,超过为double,没有小数点为int;只长度为1且字符为‘a’到‘z’或‘A'到'Z'为char,长度超过1为字符串。
相似回答