0

为什么这会将 M_PI 作为字符串“3.141593”添加到 NSMutableArray?如何将 M_PI 作为浮点数添加到数组中?

- (void)pushOperand:(float)operand
{
    [self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}

[self pushOperand:M_PI];
4

5 回答 5

1

正如其他人所说,您不能将浮点数直接存储在NSMutableArray. 但是,您的代码已经将值作为 的实例插入NSNumber,这就是您想要的。稍后,当您将对象从数组中拉出时,您可以将其恢复为 POD 类型,如下所示:

double value = 0;

id topOfStack = [stack popOperand];

if ([topOfStack isKindOfClass:[NSNumber class]]) 
    result = [topOfStack doubleValue];

顺便说一句,感谢您参加斯坦福 iOS 课程 :-)

于 2012-12-12T02:46:29.747 回答
0

您不能将 POD 类型添加到NSMutableArrayNSObject 和后代中。这是因为在添加和删除retain对象时会向对象发送消息。release如果你想按原样使用浮点数,那么你应该考虑一下。喜欢std::vector<float>

于 2012-12-12T02:26:10.030 回答
0

M_PI 转换为 NSObject,它是一个对象但不是字符串。

于 2012-12-12T02:20:05.810 回答
0

最接近浮点数的是 NSNumber:

NSNumber* mpi= @(M_PI);
于 2012-12-12T02:38:45.790 回答
0

你的代码看起来不错。是什么让您在添加到数组时认为它是一个 NSString?

于 2012-12-12T02:44:23.210 回答