1

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

由于不知道正确的方法,我想出了一些想法,比如有另一个变量来跟踪迭代次数和mod 16它。

4

3 回答 3

4

虽然您通常不能依靠小数浮点数来求和整数,但您的情况是规则的例外,因为1/16is2^(-4)并且这个数字可以用浮点数精确表示:

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

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

    NSLog(@"OK!");
}
于 2012-11-27T22:27:44.270 回答
2

最好反过来做,即使用整数循环计数器并将其转换为浮点数:

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

    if (i % 16 == 0)
    {
        // if x is whole number...
    }
}
于 2012-11-27T22:02:45.960 回答
1

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

“由于不知道正确的方法,我想出了一些想法,比如使用另一个变量来跟踪迭代次数并对其进行修改 16。”

这是一个绝妙的主意。

于 2012-11-27T22:01:50.080 回答