整数精度和转换错误

时间:2014-09-12 16:18:45

标签: objective-c type-conversion precision

我一直在为Objective-C编程几周。从1987年开始到今天,我在基础,Visual Basic,C ++和PHP等编程语言方面的经验更加广泛。虽然,在过去的5年中,我专门编写了PHP。

今天,我发现自己对Objective-C语言中我认为是位转换错误感到困惑。前几天我第一次注意到这一点,试图将一个整数(84)除以浮点数(10.0)。这产生了8.399999,而不是我希望的8.400。我编写了解决问题的方法并继续前进。

今天,我从NSMutableDictionary中提取一个(int)0。我首先将它存储在NSInteger中,然后将其存储在int变量中。两种情况下的值都应为0,但对于这两种情况,我得到整数值151229568.(见截图)

我记得从我早期的编程年代开始,我们不得不担心容器的大小,因为使用32位指针访问4位值指向内存块会导致捕获与其他相关的所有数据价值因而导致看起来错误的数字被捕获。随着内隐内存管理和类型转换成为常态,我多年来不必担心这类问题,现在我再次面对它,我需要更熟悉这个主题的程序员的建议和澄清在今天的编程环境中。

问题:

  1. 这是指针大小调整不正确的情况吗?
  2. 在后端发生了什么事情以产生从0到另一个数字的转换?
  3. 我可以做些什么来从Objective-C计算和变量赋值中获得更好的精度和准确度?
  4. 代码:

    NSInteger hsibs = [keyData objectForKey:@"half_sibs"];
    int hsibsi = [keyData objectForKey:@"half_sibs"];
    //breakpoint and screen capture of variables in stack
    

    screenshot of memory values showing dictionary and test variables

1 个答案:

答案 0 :(得分:1)

我不太了解Objective C,但看起来用于获取数据的方法返回的数据类型为id(请参阅this reference),而不是int

看起来您需要投射它或以这种方式获取整数值:

NSInteger hsibs = [[keyData objectForKey:@"half_sibs"] integerValue];
int hsibsi = [[keyData objectForKey:@"half_sibs"] intValue];

然后看看你是否得到了预期的结果。