2010-03-30 28 views
13

Quiero obtener el formato de moneda de India, entonces necesito un objeto Locale para India. Pero solo existen pocos países que tengan una constante Locale (a static final Locale), e India no es uno de ellos.Obtenga el formato de moneda para un país que no tiene una configuración regional constante

para obtener los símbolos de moneda de los EE.UU. y el Reino Unido, que pueden hacer lo siguiente:

public void displayCurrencySymbols() { 

    Currency currency = Currency.getInstance(Locale.US); 
    System.out.println("United States: " + currency.getSymbol()); 

    currency = Currency.getInstance(Locale.UK); 
    System.out.println("United Kingdom: " + currency.getSymbol()); 

} 

que utiliza las constantes Locale.US y Locale.UK. Si quiero obtener el formato de moneda india, ¿qué puedo hacer?

+0

@Thilo: ¿Cómo puedo implementarlo? – Venkat

+0

@Thilo: Funciona bien. Muchas gracias .. – Venkat

+0

@Venkats: pon este comentario bajo su respuesta, o él no lo verá. –

Respuesta

14

Según el JDK release notes, tiene los códigos locales hi_IN (Hindi) y en_IN (Inglés).

System.out.println(Currency.getInstance(new Locale("hi", "IN")).getSymbol()); 
+0

@Thilo: Funciona bien. Muchas gracias .. – Venkat

+0

La clave es que 1) La clase 'Locale' no es una colección de valores constantes; también tiene constructores. 2) Todo lo que es es un identificador para una configuración regional; el trabajo real se hace en 'Currency.getInstance()'. – Raedwald

0

Aquí está un método de utilidad que tiene el símbolo, lo que sea su configuración regional

public class Utils { 

     public static SortedMap<Currency, Locale> currencyLocaleMap; 

     static { 
      currencyLocaleMap = new TreeMap<Currency, Locale>(new Comparator<Currency>() { 
       @Override 
       public int compare(Currency c1, Currency c2) { 
        return c1.getCurrencyCode().compareTo(c2.getCurrencyCode()); 
       } 
      }); 

      for (Locale locale : Locale.getAvailableLocales()) { 
       try { 
        Currency currency = Currency.getInstance(locale); 
        currencyLocaleMap.put(currency, locale); 
       } 
       catch (Exception e) { 
       } 
      } 
     } 


     public static String getCurrencySymbol(String currencyCode) { 
      Currency currency = Currency.getInstance(currencyCode); 
      return currency.getSymbol(currencyLocaleMap.get(currency)); 
     } 

     public static String getAmountAsFormattedString(Double amount, Double decimals, String currencyCode) { 
      Currency currency = Currency.getInstance(currencyCode); 
      double doubleBalance = 0.00; 
      if (amount != null) { 
       doubleBalance = ((Double) amount)/(Math.pow(10.0, decimals)); 
      } 
      NumberFormat numberFormat = NumberFormat.getCurrencyInstance(currencyLocaleMap.get(currency)); 
      return numberFormat.format(doubleBalance); 
    } 


    } 
9

heres es cosa simple u puede hacer,

float amount = 100000; 

    NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("en", "IN")); 

    String moneyString = formatter.format(amount); 

    System.out.println(moneyString); 

La salida será, Rs.100,000.00.

+0

Lo probé. Esto funciona bien – sebadagostino

+0

Funciona bien. Pero prefiero tener el símbolo de Rupia en lugar de Rs. ¿Alguna solución rápida? – Anand

Cuestiones relacionadas