相关疑难解决方法(0)

检查float是否为整数

如何检查float变量是否包含整数值?到目前为止,我一直在使用:

float f = 4.5886;
if (f-(int)f == 0)
     printf("yes\n");
else printf("no\n");
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好的解决方案,或者这个解决方案是否存在任何(或许多)缺点.

c floating-point int

65
推荐指数
5
解决办法
9万
查看次数

为什么在float文字的末尾添加0会改变它的轮次(可能是GCC错误)?

我在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)

Ideone也会产生这种行为.

编译器做了什么来允许这种情况发生?

我发现这个不变,因为我正在追踪为什么下面的程序没有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)

当我试图计算结果从预期切换到意外时的值时,我得出了这个问题的常数.

c c++ floating-point gcc

25
推荐指数
2
解决办法
1814
查看次数

标签 统计

c ×2

floating-point ×2

c++ ×1

gcc ×1

int ×1