我正在研究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)!
我已尝试过双重操作但没有成功。
任何人都知道我做错了什么?
感谢。
答案 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等分数无法通过浮点算法正确表示。