vibrar teclados teclado tamaño puedo para escribir color cambiar aumentar aparece iphone objective-c formatting currency

tamaño - teclados para iphone 6



iPhone: cómo obtener el símbolo de moneda local(es decir, "$" en lugar de "AU $") (7)

Aquí hay un código de cómo obtengo el símbolo de moneda ahora:

NSLocale *lcl = [[[NSLocale alloc] initWithLocaleIdentifier:@"au_AU"] autorelease]; NSNumberFormatter *fmtr = [[[NSNumberFormatter alloc] init] autorelease]; [fmtr setNumberStyle:NSNumberFormatterCurrencyStyle]; [fmtr setLocale:lcl]; NSLog( @"%@", [lcl displayNameForKey:NSLocaleCurrencySymbol value:@"AUD"] ); NSLog( @"%@", [fmtr currencySymbol] );

Ambos NSLogs devuelven "AU $". Como entendí por la documentación de desarrollo de Apple, hay al menos dos símbolos de moneda para cada moneda (aunque estos símbolos podrían ser iguales): local (que se usa dentro de un país. $ Para Australia, por ejemplo) e internacional (AU $ para Australia). Entonces, la pregunta es cómo obtener el símbolo de moneda LOCAL. ¿Algunas ideas?

Gracias por adelantado.


¿Podrías obtener la cadena actual y despojarla de todos los caracteres aZ? Si la cadena resultante tiene una longitud> 0, entonces tienes tu símbolo. De lo contrario, utilice la cadena original.

Es de mal gusto y no estoy seguro de si esto funcionaría para todas las monedas del mundo, pero ¿podría funcionar?


Este fragmento de código devuelve el símbolo de moneda ¥ para la configuración regional "ja_JP" (podría ser cualquier otra configuración regional).

NSLocale* japanese_japan = [[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"] autorelease]; NSNumberFormatter* fmtr = [[[NSNumberFormatter alloc] init] autorelease]; [fmtr setNumberStyle:NSNumberFormatterCurrencyStyle]; [fmtr setLocale:japanese_japan]; // Local currency symbol (what you''re asking for) NSString* currencySymbol = [fmtr currencySymbol]; NSLog( @"%@", currencySymbol ); // Prints ''¥'' // International currency symbol NSString* internationalCurrencySymbol = [fmtr internationalCurrencySymbol]; NSLog( @"%@", internationalCurrencySymbol ); // Prints ''JPY''

Es desafortunado que para au_AU obtenga AU $ como el símbolo de la moneda local en lugar de solo $, pero esa debe ser la forma en que se debe mostrar en iOS. Sin embargo, tenga en cuenta que el símbolo internacional impreso para au_AU no es AU $, sino AUD.


No es ideal porque no está saliendo del sistema, pero obviamente puede crear su propia tabla interna utilizando una lista de símbolos de moneda actuales * . Dado que esa lista tiene los símbolos Unicode, simplemente se trataría de hacer coincidir la lista de locales de Apple con la lista.

Ya sabes, en caso de que los de Apple no sean realmente accesibles.

* Nota : enlace no pretende ser autoritario, ver comentarios.


Podría, si es necesario, crear un archivo .strings que contenga la moneda y usar la función NSLocalizedString para crear la moneda localizada. Algo como esto:

en.lproj myApp.strings: "currencySymbol"="$" "currencyFormat"="$%lf" au_AU.lproj myApp.strings: "currencySymbol"="$" "currencyFormat"="$%lf" ja_JP.lproj myApp.strings: "currencySymbol"="¥" "currencyFormat"="¥%lf"

Y usa eso así:

NSString *money = [NSString stringWithFormat:@"%@%lf", NSLocalizedString:(@"currencySymbol"), myMoney];

Sin embargo, eso significa que para cada localización que admita necesita un archivo .strings . Además, esto significa que para algunas localizaciones, el símbolo de moneda no sería suficiente para mostrar el formato monetario adecuado, tendría que usar algo como esto:

NSString *money = [NSString stringWithFormat:NSLocalizedString(@"CurrencyFormat"), myMoney];

Esto tiene algunas limitaciones, pero podría funcionar para usted.



Versión de Swift, código adaptado de la respuesta de Valentyn (probado en Swift 4.1 ):

func formattedCurrency(amount: Double, locale: Locale) -> String? { let formatter = NumberFormatter() formatter.locale = locale formatter.maximumFractionDigits = 2 formatter.minimumFractionDigits = 2 formatter.alwaysShowsDecimalSeparator = true formatter.numberStyle = .currency return formatter.string(from: NSNumber(value: amount)) }

Da un resultado decente, aunque no cambia la posición del símbolo de moneda correctamente para todas las configuraciones regionales, a pesar de lo que está escrito en la respuesta original. Pero así es como Apple quiere que sea, que así sea.

El dólar australiano se muestra como pregunta de la pregunta original, como "$ 1.50".


NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease]; [currencyFormatter setLocale:[NSLocale currentLocale]]; [currencyFormatter setMaximumFractionDigits:2]; [currencyFormatter setMinimumFractionDigits:2]; [currencyFormatter setAlwaysShowsDecimalSeparator:YES]; [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; NSNumber *someAmount = [NSNumber numberWithFloat:5.00]; NSString *string = [currencyFormatter stringFromNumber:someAmount];

Recibirá $ 5.00 para EE. UU., ¥ 5.00 para Japón, 5.00 € para Europa, etc.