Цель C получить десятичную от объекта Json - PullRequest
0 голосов
/ 20 октября 2010

Я пытаюсь преобразовать значение json в десятичную безуспешно.Я использую следующую структуру

http://code.google.com/p/json-framework/

, и мой код выглядит следующим образом

NSDecimal RRP = [[jProduct objectForKey:@"Price"] decimalValue];
NSLog(@"%@", RRP);

Я получаю

Программа получила сигнал: «EXC_BAD_ACCESS».

Просто для проверки я подумал, что попробую это:

NSLog(@"%@", [jProduct objectForKey:@"Price"]);

42,545

Я получаю значениено, очевидно, я не установил NSDecimal.

У кого-нибудь еще был подобный опыт или можно увидеть, что я делаю неправильно?

Спасибо

Ответы [ 5 ]

2 голосов
/ 20 октября 2010

Я не знаком с используемой вами платформой, но я бы предложил следующее:

Какой тип возвращен [jProduct objectForKey: @ "price"]?

Возможно, вам нужно обойти тот факт, что это неправильный тип - может быть, строка NSString?

Попробуйте:

NSDecimal RRP = [[NSDecimalNumber decimalNumberWithString: [jProduct objectForKey: @ "Price"] decimalValue];

Edit:

Да, NSDecimal - это структура, а не объект, поэтому не следует использовать NSLog (@ "% @"); как идентификатор формата% @ для объектов. Вместо этого вы можете использовать идентификаторы формата основного типа, такие как% d или% i, и обращаться к компонентам структуры по отдельности.

Однако, поскольку вы, вероятно, захотите записать десятичное число, а не компоненты структуры (знак, мантисса и т. Д.), Вы, вероятно, захотите преобразовать его обратно в NSDecimalNumber (который является объектом).

Так становится:

NSLog (@ "% @", [NSDecimalNumber decimalNumberWithDecimal: RRP]);

0 голосов
/ 23 июня 2013

См. Пример Десятичное число & JSON .Я думаю, что это поможет вам.

0 голосов
/ 20 октября 2010

NSDecimal - это структура, а не объект. Если вы хотите напечатать NSDecimal, используйте NSDecimalString():

NSDecimal rrp = [[jProduct objectForKey:@"Price"] decimalValue];
NSLog(@"%@", NSDecimalString(rrp));
0 голосов
/ 20 октября 2010

сохранить значение в NSNumber

NSNumber * num = [jProduct objectForKey: @ "Price"];

0 голосов
/ 20 октября 2010
[jProduct objectForKey:@"Price"]

может быть строкой NSString.NSString ответить на:

 – doubleValue
 – floatValue
 – intValue
 – integerValue
 – longLongValue
 – boolValue

не десятичное значение

Проверьте класс ваших данных.

...