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

StackOverflow https://stackoverflow.com/questions/493817

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

Используйте 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, проверьте Документация.Есть также Значение для некоторых структур, таких как NSPoint и NSRect.

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

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

Например:

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

// ...

[prices addObject:price];
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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top