2010-05-30 11 views
11

Estoy usando un NSDecimalNumber para almacenar dinero en Core Data. Ingenuamente usé stringWithFormat: al principio formateé el valor, luego me di cuenta de que no era compatible con NSDecimalNumber y, en cambio, estaba formateando el puntero :(. Así que después de leer algunos documentos aprendí a usar NSNumberFormatter para obtener el formato que quería. pero esto sólo me llama la atención como el "camino difícil". ¿hay alguna manera más fácil que esto :?¿Es NSNumberFormatter la única forma de formatear un NSDecimalNumber?

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

Respuesta

13

No hay nada malo con este enfoque, y es el patrón convencional para convertir las clases de números opacos a las cadenas.

Si tengo un UIView que usa un formateador a menudo, normalmente tendré uno como miembro de instancia, así que evito tener que repetirlo alloc/init/release el formateador.

0

NSNumberFormatter puede ser costoso, ¿por qué no llamar [descriptionWithLocale ent:]

+0

De lo que puedo decir en la documentación, que no proporciona una manera de formato de moneda. –

-1

Sólo convertirlo en un doble y el uso de "F"

[NSString stringWithFormat: @ "% 1.2f", [ent doubleValue]];

+0

Es ciertamente más rápido, pero creo que hay casos en los que esto mostrará un valor incorrecto. Si uno pudiera simplemente usar dobles en todas partes, no necesitaría NSDecimalNumber en primer lugar. –

18

en iOS 4.0 y posterior puede utilizar este método:

NSString* currencyString = [NSNumberFormatter 
           localizedStringFromNumber:number 
           numberStyle:NSNumberFormatterCurrencyStyle]; 
Cuestiones relacionadas