为什么这会将 M_PI 作为字符串“3.141593”添加到 NSMutableArray?如何将 M_PI 作为浮点数添加到数组中?
- (void)pushOperand:(float)operand
{
[self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}
[self pushOperand:M_PI];
为什么这会将 M_PI 作为字符串“3.141593”添加到 NSMutableArray?如何将 M_PI 作为浮点数添加到数组中?
- (void)pushOperand:(float)operand
{
[self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}
[self pushOperand:M_PI];
正如其他人所说,您不能将浮点数直接存储在NSMutableArray
. 但是,您的代码已经将值作为 的实例插入NSNumber
,这就是您想要的。稍后,当您将对象从数组中拉出时,您可以将其恢复为 POD 类型,如下所示:
double value = 0;
id topOfStack = [stack popOperand];
if ([topOfStack isKindOfClass:[NSNumber class]])
result = [topOfStack doubleValue];
顺便说一句,感谢您参加斯坦福 iOS 课程 :-)
您不能将 POD 类型添加到NSMutableArray
NSObject 和后代中。这是因为在添加和删除retain
对象时会向对象发送消息。release
如果你想按原样使用浮点数,那么你应该考虑一下。喜欢std::vector<float>
。
M_PI 转换为 NSObject,它是一个对象但不是字符串。
最接近浮点数的是 NSNumber:
NSNumber* mpi= @(M_PI);
你的代码看起来不错。是什么让您在添加到数组时认为它是一个 NSString?