2013-06-03 2 views
0

У меня возникли проблемы с переменной NSNumber «номер», который в настоящее время содержащей 0.522000003606Set Precision для значения NSNumber

Я посмотрел несколько других вопросов на StackOverflow с другими, имеющими тот же вопрос, но ничего. Мой проект в настоящее время использует ARC, поэтому я думаю, что некоторые функции недоступны, то есть, если я не откажу ARC в классе, в котором я сейчас хочу установить точность NSNumber.

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

Everytime я использую NSNumberFormatter, он выплевывает обратно NULL !!!

nowValue = [now objectForKey:@"value"]; // This is what IM ACTUALLY DOING!!! 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setRoundingMode:NSNumberFormatterRoundHalfUp]; 
[formatter setFormatWidth:2]; 
NSString *string = [formatter stringFromNumber:num]; 

Я чувствую, что это СООО тривиально! Может ли кто-нибудь дать любительскому программисту какие-то советы? :)

EDIT:

Это то, что я делаю сейчас, используя NSDecimal, а не NSNumber. «Now» - это большой объект словаря, а nowValue - это копия num.

nowValue = (__bridge NSDecimal *)([now objectForKey:@"value"]); 
+1

Покажите нам код, в котором вы NSLog значение «Num» происходит в. –

+0

NSDecimal является структурой, не является объектом, так что теперь я действительно очень смущенный. Обновите свой вопрос с помощью реального примера. Начните с NSNumber, инициализированного до 0.522000003606, затем материал форматирования, затем вывод, который НЕ является тем, кем вы хотите, и сообщите нам, на что вы хотите, чтобы точно выглядела строка. –

+2

Какой тип объекта '[now objectForKey: @" value "]' действительно возвращается? Вы можете показать вывод 'NSLog (@"% @ ", [[now objectForKey: @" value "] class]'? - Обратите внимание, что любое литье или мост не изменяет объект вообще и поэтому не помогает. –

ответ

1

Проблема решена! ..... Спасибо за каждый вход, но да .... это была строка. Martin R, спасибо, что вы отлаживаете код. И понимание _NSCFString на самом деле просто оболочка для NSString, но они были в основном одинаковыми.

Здесь было мое решение ...

nowValue outputs : 24.14295959472 

nowValue = [now objectForKey:@"value"]; 
NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
[f setNumberStyle:NSNumberFormatterDecimalStyle]; 
NSNumber * nowNum = [f numberFromString:nowValue]; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; 
nowValueFormatted = [formatter stringFromNumber:nowNum]; 

nowNum outputs : 24.14 
+0

Я планирую иметь функцию форматирования, чтобы сделать ее более эффективной, поскольку, по-видимому, используя классы форматирования ОЧЕНЬ неэффективно .... Внутри функции я буду включать статические переменные, чтобы позволить объектам форматирования не перераспределяться и занимать много памяти – jsetting32