2010-05-30 3 views
11

Я использую NSDecimalNumber для хранения денег в Core Data. Я наивно использовал stringWithFormat: сначала для форматирования значения, позже понимая, что он не поддерживает NSDecimalNumber и вместо этого форматировал указатель :(Поэтому после некоторого чтения через документы я научился использовать NSNumberFormatter, чтобы получить желаемый формат. Но это просто поражает меня, как «трудный путь». есть ли более простой способ, чем это :?Является ли NSNumberFormatter единственным способом форматирования NSDecimalNumber?

NSNumberFormatter * formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 
priceField.text = [formatter stringFromNumber: ent.price]; 
[formatter release]; 

ответ

13

там нет ничего плохого в таком подходе, и это обычный шаблон для преобразования непрозрачных классов чисел в строки.

Если у меня есть UIView, который часто использует форматтер, у меня обычно будет один экземпляр, поэтому я не буду повторно повторять alloc/init/release форматтер.

0

NSNumberFormatter может быть дорогим, почему бы просто не назвать [лор descriptionWithLocale:]

+0

Из того, что я могу сказать, в документации, что не обеспечивает способ форматирования валюты. –

-1

Просто преобразовать его в двойной и использовать "F"

[NSString stringWithFormat: @ "% 1.2f", [лор doubleValue]];

+0

Это, конечно, быстрее, но я считаю, что есть случаи, когда это отображает неправильное значение. Если бы везде можно было использовать двойники, вам не понадобится NSDecimalNumber. –

18

на прошивке 4.0, а затем вы можете использовать этот метод:

NSString* currencyString = [NSNumberFormatter 
           localizedStringFromNumber:number 
           numberStyle:NSNumberFormatterCurrencyStyle]; 
Смежные вопросы