2010-05-30 24 views
11

Ich verwende eine NSDecimalNumber, um Geld in Core Data zu speichern. Ich nutzte naiv StringWithFormat: zunächst den Wert formatieren, später erkannte, dass es NSDecimalNumber nicht unterstützt und stattdessen den Zeiger formatierte :(. So nach einigem Lesen der Dokumente habe ich gelernt, den NSNumberFormatter zu verwenden, um das Format zu erhalten, das ich wollte. aber das scheint mich ebenso wie die „harte Tour“. gibt es einen einfacheren Weg, als diese :?Ist NSNumberFormatter die einzige Möglichkeit, eine NSDecimalNumber zu formatieren?

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

Antwort

13

es ist nichts falsch mit diesem Ansatz, und es ist das herkömmliche Muster undurchsichtige Anzahl Klassen in Strings zu konvertieren.

Wenn ich eine UIView habe, die oft einen Formatierer benutzt, dann habe ich normalerweise einen als Mitglied der Instanz, also vermeide ich es wiederholt alloc/init/release der Formatierer.

0

NSNumberFormatter kann teuer sein, warum rufen Sie nicht nur [ent descriptionWithLocale:]

+0

Von dem, was ich in der Dokumentation erzählen kann, die nicht einen Weg bereitstellt Währung zu formatieren. –

-1

einfach es zu einem Doppel konvertieren und "F"

[NSString string verwenden: @ "% 1.2F", [ent doubleValue]];

+0

Es ist sicherlich schneller, aber ich glaube, es gibt Fälle, in denen dies den falschen Wert anzeigt. Wenn man einfach überall doubles verwenden könnte, würde man NSDecimalNumber überhaupt nicht benötigen. –

18

auf iOS 4.0 und höher können Sie diese Methode verwenden:

NSString* currencyString = [NSNumberFormatter 
           localizedStringFromNumber:number 
           numberStyle:NSNumberFormatterCurrencyStyle]; 
Verwandte Themen