2012-12-12 18 views
0

爲什麼這會將M_PI作爲字符串「3.141593」添加到NSMutableArray中?我如何將M_PI作爲浮點數添加到數組中?當使用addObject時M_PI被轉換爲字符串

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

[self pushOperand:M_PI]; 

回答

1

正如其他人所說的,您不能直接在NSMutableArray中存儲浮點數。但是,您的代碼已經將該值作爲NSNumber的實例插入,而這正是您想要的。

double value = 0; 

id topOfStack = [stack popOperand]; 

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

榮譽的方式,做了斯坦福大學的iOS當然:-)

:後來,當你拉的對象回來了數組,你可以用這樣的恢復到一個POD類型
0

M_PI轉換爲一個NSObject,它是一個對象,但不是一個字符串。

+0

什麼將其轉換爲NSObject? M_PI不是一個常量浮點數嗎?那麼你是說浮動轉換爲對象與任何轉換? –

+0

我還沒有理解這個答案,如果他意味着M_PI是一個錯誤的對象。 –

+0

[NSNumber numberWithFloat:operand]將float轉換爲從NSObject繼承的NSNumber。這就是爲什麼你可以通過NSLog(「%@」,...)轉儲對象作爲一個NSObject,看起來像一個字符串。 – neo

0

您不能將POD類型添加到NSMutableArray,只能添加NSObject和後代。這是因爲retain消息在您添加時發送到對象,release在刪除時發送。如果你想使用float,那麼你應該考慮smth。如std::vector<float>

0

最接近的一個浮球是一個NSNumber的:

NSNumber* mpi= @(M_PI); 
0

您的代碼看起來不錯。什麼讓你認爲這是一個NSString添加到你的數組?

相關問題