iphone objective-c ipad currency nsnumberformatter

iphone - ¿NSNumberFormatter moneda sin símbolo?



objective-c ipad (3)

Con Swift 4.2, NumberFormatter tiene una propiedad llamada currencySymbol . currencySymbol tiene la siguiente declaración:

var currencySymbol: String! { get set }

La cadena utilizada por el receptor como un símbolo de moneda local.

Por lo tanto, si es necesario para su estilo de formato, puede establecer esta propiedad en una String vacía.

El siguiente código de Zona de juegos muestra cómo configurar su estilo de formato de moneda con un símbolo vacío:

import Foundation let amount = 12000 let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.currencySymbol = "" formatter.locale = Locale(identifier: "en_US") // set only if necessary let result = formatter.string(for: amount) //let result = formatter.string(from: NSNumber(value: amount)) // also works print(String(describing: result)) // prints: Optional("12,000.00")

Estoy utilizando NSNumberFormatter para obtener un valor de moneda de una cadena y funciona bien.

Yo uso este código para hacerlo:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; [nf setNumberStyle:NSNumberFormatterCurrencyStyle]; NSString *price = [nf stringFromNumber:[NSNumber numberWithFloat:[textField.text floatValue]]];

Sin embargo, siempre me da un símbolo de moneda al comienzo de la cadena. En lugar de hacerlo manualmente desde mi cadena dada, ¿no puedo hacer que el formateador no le dé ningún símbolo de moneda a la cadena?


Sí, después de configurar el estilo, puedes modificar aspectos específicos:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; [nf setNumberStyle:NSNumberFormatterCurrencyStyle]; [nf setCurrencySymbol:@""]; // <-- this NSDecimalNumber* number = [NSDecimalNumber decimalNumberWithString:[textField text]]; NSString *price = [nf stringFromNumber:number];

Al igual que algunos consejos, probablemente deberías usar un formateador de números para leer el valor de la cadena, especialmente si un usuario lo ingresa (como lo sugiere tu código). En este caso, si el usuario ingresa texto de formato específico de la localidad, los -floatValue genéricos de tipo -floatValue y -doubleValue no le darán números truncados. Además, probablemente debería usar -doubleValue para convertir a un número de punto flotante del texto ingresado por el usuario que es una moneda. Hay más información sobre esto en el video de la sesión del desarrollador de WWDC''12 sobre internacionalización.

Editar: usó un NSDecimalNumber en el código de ejemplo para representar el número que ingresa el usuario. Todavía no hace la validación adecuada, pero es mejor que el código original. Gracias @Mark !


como para Swift Language

let mymoney = 12000 let formatter = NSNumberFormatter() formatter.numberStyle = .CurrencyStyle formatter.currencySymbol = "" formatter.locale = NSLocale.currentLocale() let resultString = formatter.stringFromNumber(mymoney)!