проверка дали стойността на float e цяло число
width.is_integer()
връща True, ako няма дробна част
width.is_integer()
връща True, ako няма дробна част
Би могъл да използваш функции като floor или ceiling и да провериш дали резултата е същият като оригиналното число.
Това би работило за повечето констатни float-ове, има проблем когато float-а, който проверяваш е резултат от някаква сметка
и се получи някакво разкръгление поради липса на точност. На пример,
float z = powf(powf(3.0f, 0.05f), 20.0f);
би трябвало да върне 3, (3 на степен 1/20, цялото повдигнато на 20-та степен), но резултатът поне на С е 2.9999992847442626953125, и ако изберем да го разкръглим към нулата, това би върнало 2. За да се справиш с този проблем, би могъл да определиш някаква константа, която представлява един вид "толеранс".
const float EPSILON = 0.00001;
float z = powf(powf(3.0f, 0.05f), 20.0f);
if(abs(z - 3) < EPSILON) {
print("integer");
} else {
print("not integer");
}
Тъй като не си предоставил контекстът, в който ще ползваш кода, не знам дали това би работило в твоят случай.
Аз се водех от https://stackoverflow.com/questions/5796983/checking-if-float-is-an-integer тази тема в stack overflow, също бих ти препоръчал да прегледаш страницата в уикипедия
https://en.wikipedia.org/wiki/Floating-point_arithmetic
П.С.: снипетът не е валиден С код.