繁体   English   中英

整数精度和转换错误

[英]Integer Precision and Conversion Errors

我已经为Objective-C编程了仅几个星期。 从1987年开始一直延续到今天,我在编程语言(如基本,Visual Basic,C ++和PHP)方面的经验要丰富得多。 尽管在最近5年中,我只编写了PHP。

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

今天,我要从NSMutableDictionary中提取一个(int)0。 我先将其存储在NSInteger中,然后将其存储在int变量中。 对于这两种情况,该值都应为0,但是对于这两种情况,我都获得了整数值151229568。(请参见截屏)

我记得在我早期的编程生涯中,我们不得不担心容器的大小,因为使用32位指针指向内存块以访问4位值会导致捕获与其他值相关的所有数据,因此导致似乎捕获了错误的号码。 随着隐式内存管理和类型转换成为常态,多年以来,我不必担心这种问题,而现在,我再次面对这种问题,我需要更熟悉该主题的程序员的建议和澄清。在当今的编程环境中。

问题:

  1. 这是指针大小不正确还是其他原因?
  2. 后端发生什么情况才能产生从0到另一个数字的转换?
  3. 我该怎么做才能从我的Objective-C计算和变量分配中获得更好的精度和准确性?

码:

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

显示字典和测试变量的内存值的屏幕截图

我不太了解Objective C,但是看来您用来获取数据的方法返回的是数据类型id (请参阅参考资料 ),而不是int

看起来您需要强制转换或以这种方式获取整数值:

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

然后查看您是否获得了预期的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM