2012-10-02 35 views
9

Tengo algunos problemas para obtener el símbolo de moneda predeterminado del sistema. me estoy haciendo el símbolo de moneda de esta manera:Moneda local Símbolo

Currency currency = Currency.getInstance(Locale.getDefault()); 
Log.v("TAG",currency.getSymbol()); 

Cuando el idioma del sistema está en English (United States) el símbolo de la derecha muestra arriba ($). Pero cuando elijo el idioma Portuguese (Portugal), devuelve este símbolo ¤.

¿Qué puede estar causando esto?

+0

Puede que esté utilizando UTF-8 en lugar de UTF-16? No veo cómo podría suceder eso, pero es un pensamiento. – AedonEtLIRA

+0

creo que esta será una buena solución para su respuesta Currency.getInstance (nueva configuración regional ("YOUR LANGUAGE", countryCode)). GetSymbol(); –

+0

Puede obtener una respuesta a su pregunta a partir de este [enlace] (https://stackoverflow.com/questions/16832655/getting-currency-code-if-we-have-only-country-code-in-database/16833419# 16833419) –

Respuesta

2

Algunos pensamientos;

  1. Podría ser que usted está recibiendo el símbolo adecuado para (Euro), pero su fuente/registro no lo tiene y que sólo se parece a ese símbolo?

  2. La configuración regional es una clase bastante juguetona, sus constructores no tienen errores de comprobación. Puede ver fácilmente las configuraciones regionales que no son compatibles o que realmente no existen en las normas (como "de_US" para "alemán hablado en EE. UU.").

  3. Tenga en cuenta que los datos de configuración regional no están necesariamente disponibles para ninguno de los entornos predefinidos como constantes en esta clase, excepto para en_US, que es la única configuración regional. Garantías Java siempre están disponibles y difieren en diferentes versiones de Android. también puede estar limitado por el operador o compilaciones personalizadas. pt_PT was added in 2.3.

  4. En cuanto a la opción que presentó, si selecciona Unicode's standards, ya que se implementaron en API8 y superiores, Portugal existe solo como un territorio (y no como una combinación).

  5. Puede ser mejor si, por lo tanto, crea una instancia local parcial solo del código de país y luego obtiene el símbolo de moneda para Portugal, por ejemplo. No podrá cumplir con el statics of Locale's class predefinido, ya que admite muy estrechamente diferentes configuraciones regionales (es una lista corta), pero debería funcionar ya que esta configuración regional tiene los datos que está buscando en el sistema.

  6. También trataría de ver si currency.toString() devuelve el EUR (el código ISO 4217 de la moneda, generalmente un acrónimo de tres letras).

13

Esto parece ser un problema conocido (http://code.google.com/p/android/issues/detail?id=38622 llegué a una solución posible de esta manera:.

Dado que el problema está en el símbolo y no el código de moneda, i resolvió este problema al crear una estático Map donde la clave es CurrencyCode y el valor es Symbol.

public static final Map<String, String> MYCURRENCIES = new HashMap<String, String>(){ 
     { 
      put("EUR","€"); 
      put("USD","$"); 
      (..) 
     } 
}; 

Con el fin de obtener todos (o casi) los códigos de monedas disponibles en la información de lugares que usted puede hacer algo como esto:

for (Locale ll: Locale.getAvailableLocales()){ 
    try { 
     Currency a = Currency.getInstance(ll); 
     Log.v("MyCurrency",a.getCurrencyCode()+"#"+a.getSymbol()); 
    }catch (Exception e){ 
     // when the locale is not supported 
    } 
} 

después de haber creado a trazar con el CurrencyCode y símbolo sólo hay que algo como esto:

Currency currency = Currency.getInstance(Locale.getDefault()); 
String curSymbol = MYCURRENCIES.get(currency.getCurrencyCode()); 
+1

esto es genial, gracias. ps: para todos los demás: en lugar de Log.v simplemente MYCURRENCIES.put (a.getCurrencyCode(), a.getSymbol()); –

2
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(); 
    String cur = currencyFormatter.format(yourValue); 

Formatea el int/doble para una moneda basada en el idioma del dispositivo

String currency = cur.replaceAll("[0-9.,]",""); 

Y esto es cómo conseguir que sólo el símbolo de moneda, mediante la sustitución de todos los números, puntos y comas

Cuestiones relacionadas