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

Я прочитал этот вопрос и внедрил подход, который был сформулирован относительно установки кода статуса ответа на 278, чтобы избежать прозрачности работы браузера с переадресацией. Несмотря на то, что это сработало, я был немного недоволен, так как это немного взломал.

После того, как я снова начал копаться, я бросил этот подход и использовал JSON . В этом случае все ответы на запросы ajax имеют код состояния 200, а тело ответа содержит объект JSON, который построен на сервере. Javascript на клиенте может затем использовать объект JSON, чтобы решить, что ему нужно делать.

У меня была аналогичная проблема с вашей. Я выполняю запрос ajax, который имеет 2 возможных ответа: один, который перенаправляет браузер на новую страницу и заменяет существующую HTML-форму на текущей странице новой. Код jquery для этого выглядит примерно так:

$.ajax({
    type: "POST",
    url: reqUrl,
    data: reqBody,
    dataType: "json",
    success: function(data, textStatus) {
        if (data.redirect) {
            // data.redirect contains the string URL to redirect to
            window.location.href = data.redirect;
        }
        else {
            // data.form contains the HTML for the replacement form
            $("#myform").replaceWith(data.form);
        }
    }
});

Объект «данные» объекта JSON построен на сервере, чтобы иметь 2 члена: data.redirect и data.form. Я нашел этот подход намного лучше.

30
задан Jon 29 January 2009 в 22:44
поделиться

3 ответа

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

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

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

62
ответ дан 27 November 2019 в 23:17
поделиться

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

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

получают его путем отправки floatValue:

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

Код не тестируется.

можно перенести много других типов данных в NSNumber также, проверить документация . Существует также NSValue для некоторых структур как NSPoint и NSRect.

12
ответ дан 27 November 2019 в 23:17
поделиться

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

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

, Например:

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

// ...

[prices addObject:price];
7
ответ дан 27 November 2019 в 23:17
поделиться