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)!