如何检查float变量是否包含整数值?到目前为止,我一直在使用:
float f = 4.5886;
if (f-(int)f == 0)
printf("yes\n");
else printf("no\n");
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更好的解决方案,或者这个解决方案是否存在任何(或许多)缺点.
我在x86 VM(32位)上发现了以下程序:
#include <stdio.h>
void foo (long double x) {
int y = x;
printf("(int)%Lf = %d\n", x, y);
}
int main () {
foo(.9999999999999999999728949456878623891498136799780L);
foo(.999999999999999999972894945687862389149813679978L);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
(int)1.000000 = 1
(int)1.000000 = 0
Run Code Online (Sandbox Code Playgroud)
编译器做了什么来允许这种情况发生?
我发现这个不变,因为我正在追踪为什么下面的程序没有0按照我的预期产生(使用19 9秒产生0我预期的):
int main () {
long double x = .99999999999999999999L; /* 20 9's */
int y = x;
printf("%d\n", y);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我试图计算结果从预期切换到意外时的值时,我得出了这个问题的常数.