objective-c检查float和int的相等性 - 2.0000 == 2

时间:2012-11-27 22:00:12

标签: objective-c ios c

简单的问题,我知道必须有一个正确的方法来做到这一点。我有一个CGFloat,增量为1/16。我想确定此值何时变为整数。

由于缺乏正确的方法,我想出了另外一个变量来跟踪迭代次数和mod 16的想法。

3 个答案:

答案 0 :(得分:4)

虽然您通常不能指望小数浮点数总和为整数,但您的情况是规则的例外,因为1/162^(-4)并且此数字可以表示为精确浮动:

- (void)testFloat
{
    float a = 0.0f;

    while (a != 2.0f) {
        a += 0.0625f;
    }

    NSLog(@"OK!");
}

答案 1 :(得分:2)

最好以相反的方式进行,即使用整数循环计数器并将其转换为浮点数:

for (int i = 0; i < 100; ++i)
{
    float x = (float)i / 16.0f;

    if (i % 16 == 0)
    {
        // if x is whole number...
    }
}

答案 2 :(得分:1)

浮点运算是不精确的,所以你不能指望你的变量值正好2.0000

“由于缺乏正确的方法,我想出了一些想法,比如有另一个变量来跟踪迭代次数,然后调整它。”

这是一个很棒的主意。