在float上划分整数时,结果不正确

时间:2012-02-10 12:21:27

标签: objective-c floating-point divide

我正在研究Objective C,我试图推断出2维数组的正确索引。

要做到这一点,我有一些设置标签的按钮,将两个索引合并为一个数字。例如,数组中1,1的位置导致tag = 11.

之后要取消合并索引的两个组件,我正在使用以下代码:

float tag = (float)[sender tag];

    float x = [[NSString stringWithFormat:@"%.2f", tag / 10.f] floatValue];
    //float x = (float)tag / 10.f;

    int y = floor (x);

    int z = (x - y) * 10;

这个理论很好,但是当我得到这些结果时我很惊讶:

tag = 23 x = 2.29999995而不是2.3的预期结果(23/10 = 2.3而不是2.2999995)!

我已尝试过双重操作但没有成功。

任何人都知道我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:4)

使用整数运算。浮点并不代表具有完全准确性的所有数字,尤其是非整数值。

[sender tag]为23的示例:

int senderTag = 23;
int tagA = senderTag / 10;
int tagB = senderTag % 10;
NSLog(@"senderTag: %d, tagA: %d, tagB: %d", senderTag, tagA, tagB);

NSLog输出:

senderTag:23,tagA:2,tagB:3

答案 1 :(得分:0)

特别是,1 / 3,1 / 5等分数无法通过浮点算法正确表示。