2010-05-30 11 views
11

Używam NSDecimalNumber do przechowywania pieniędzy w danych podstawowych. Naiwnie użyłem stringWithFormat: najpierw do sformatowania wartości, później zdając sobie sprawę, że nie obsługuje NSDecimalNumber i zamiast tego formatował wskaźnik :(. Po przeczytaniu dokumentów nauczyłem się używać NSNumberFormatter, aby uzyskać żądany format. ale to tylko uderza mnie jako „hard way”. Czy jest jakiś prostszy sposób niż ten :?Czy NSNumberFormatter jest jedynym sposobem sformatowania numeru NSDecimalNumber?

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

Odpowiedz

13

nie ma nic złego w tym podejściu, i jest to konwencjonalny wzór do konwertowania nieprzezroczyste klas numerycznych strun.

Jeśli mam urządzenie UIView, które często korzysta z formatera, zwykle będę go używać jako członka instancji, więc unikam wielokrotnego powtarzania alloc/init/release formater.

0

NSNumberFormatter mogą być drogie, to dlaczego nie po prostu zadzwoń [ENT descriptionWithLocale:]

+0

Z tego co mogę powiedzieć w Dokumenty, które nie przewidują sposobu formatowania waluty. –

-1

Wystarczy przekształcić go dwukrotnie i używać "F"

[NSString stringWithFormat: @ "% 1.2F" [ENT doubleValue]];

+0

Jest to z pewnością szybsze, ale wydaje mi się, że są przypadki, w których będzie wyświetlana niewłaściwa wartość. Gdybyśmy mogli używać debla wszędzie, to nie potrzebowalibyśmy NSDecimalNumber w pierwszej kolejności. –

18

na iOS 4.0 i później można użyć tej metody:

NSString* currencyString = [NSNumberFormatter 
           localizedStringFromNumber:number 
           numberStyle:NSNumberFormatterCurrencyStyle]; 
Powiązane problemy