Подтвердить что ты не робот

Как создать NSMutableArray значений с плавающей запятой

Я новичок в разработке Objective-C и iPhone, и я пытаюсь сохранить значения с плавающей запятой в NSMutableArray, но когда я это сделаю, я получаю сообщение об ошибке "несовместимый тип для аргумента 1 из" addObject ". Что я делаю не так? Я пытаюсь создать массив удвоений, чтобы выполнить математические вычисления с помощью.

4b9b3361

Ответ 1

NSMutableArray содержит только объекты, поэтому вы хотите, чтобы массив был загружен объектами NSNumber. Создайте каждый NSNumber, чтобы удерживать двойной, затем добавьте его в свой массив. Возможно, что-то вроде этого.

NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];

Повторите при необходимости.

Ответ 2

Используйте NSNumber для переноса вашего float, потому что в словаре нужен объект:

[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];

получить его, отправив floatValue:

float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];

Код не проверен.

Вы также можете обернуть многие другие типы данных в NSNumber, проверьте documentation. Там также NSValue для некоторых структур, таких как NSPoint и NSRect.

Ответ 3

В Cocoa, NSMutableDictionary (и все коллекции, действительно) требуют объектов как значений, поэтому вы не можете просто передать какой-либо другой тип данных. Как предложили sjmulder и Ryan, вы можете обернуть ваши скалярные значения в экземплярах NSNumber (для числа) и NSValue для других объектов.

Если вы представляете десятичное число, для чего-то вроде цены, я бы предложил также посмотреть и использовать NSDecimalNumber. Затем вы можете избежать проблем с неточностями с плавающей запятой, и обычно вы можете использовать и хранить "значение" как NSDecimalNumber вместо того, чтобы представлять его с помощью примитив в коде.

Например:

// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray*  prices= [[NSMutableArray array] retain];

// ...

[prices addObject:price];

Ответ 4

NSMutableArray *muArray = [[NSMutableArray alloc] init];
NSNumber *float = [NSNumber numberWithFloat:210.0f];
NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
[muArray addObject:float];
[muArray addObject:float1];

NSlog(@"my array is--%@",muArray);