C语言里浮点数和整数的操作和表示都不相同,这种说法很不严格,所以如何判断,就看你自己的定义啦。我的理解是,如果一个浮点数可以分为整数部分和小数部分,那么你想判断一个浮点数是不是跟它的整数部分基本相同,严格一点说就是误差很小。这样的话,你可以这么写:double err = 1e-10; //先自己定义误差x = 2.9999999997;if (abs(int(x)-x)< err) // 和它整数部分误差的绝对值是否小于规定的误差...
#include <math.h>//a可以是float、double、long double型if (floor(a) == a){ //a是浮点数但里面存的可以看做是整数}else{ //a是浮点数}
c语言里数字输入输出的时候都有确定它的类型的啊,不用判断的.如果你指的是那种直接给你的一个数的话,那是不确定的,比如2.0可以确定它是浮点数,但是2就不确定了,,可能是浮点数,也可能是整形的,看你定义的时候是怎么定义的了
无论是通过sizeof查看字节数(int和float占用字节数相同),还是做float转换为int然后相除判断是否等于1(int转为float可能尾数丢失),或者是sprintf转化为字符串去检查是否有小数点(int会转换为float,导致有小数点出现),都有问题。以字符读入数,挨个字符判断,检查到有小数点且所有字符在字符‘0’到‘9’之间,且小数点后不超过6位可以判为float,超过为double,没有小数点为int;只长度为1且字符为‘a’到‘z’或‘A'到'Z'为char,长度超过1为字符串。