Метод NSNumber doubleValue возвращает ноль в цели C (IOS)

Я изучаю iOS, и у меня есть NSNumber, который, кажется, в порядке, но когда я спрашиваю о его двойном значении, я получаю ноль.

[stack addObject: [NSNumber numberWithDouble:operand]]
id topOfStack = [stack lastObject];
if([topOfStack isKindOfClass:[NSNumber class]]){
    NSLog(@"%@",topOfStack);
    NSLog(@"%@",[topOfStack class]);
    result  = [topOfStack doubleValue];
    NSLog(@"%@",result);
}

Это печатает:

2012-04-11 17:52:04.909 RPNCalc[4127:f803] 3
2012-04-11 17:52:04.910 RPNCalc[4127:f803] __NSCFNumber
2012-04-11 17:52:04.910 RPNCalc[4127:f803] (null)

Почему doubleValue будет равно нулю?

2 ответа

Решение

Вы получаете NULL, потому что%@ является строковым литералом для объекта. Двойники не являются объектами. Используйте%f, чтобы NSLog поплавок или удвоить.

Замените NSLog(@"%@",topOfStack); с NSLog(@"%g",topOfStack);

Другие вопросы по тегам