2010-03-30 10 views
13

Voglio ottenere il formato di valuta dell'India, quindi ho bisogno di un oggetto Locale per l'India. Ma esistono solo pochi paesi che hanno una costante Locale (uno static final Locale), e l'India non è uno di questi.Ottieni il formato valuta per un paese che non ha una costante Locale

per ottenere i simboli di valuta per gli Stati Uniti e nel Regno Unito, posso effettuare le seguenti operazioni:

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()); 

} 

che utilizza le costanti Locale.US e Locale.UK. Se voglio ottenere il formato in valuta indiana, cosa posso fare?

+0

@Thilo: come posso implementarlo? – Venkat

+0

@Thilo: funziona bene. Grazie mille .. – Venkat

+0

@Venkats: metti questo commento sotto la sua risposta, altrimenti non lo vedrà. –

risposta

14

In base allo JDK release notes, i codici locali sono hi_IN (hindi) e en_IN (inglese).

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

@Thilo: Funziona bene. Grazie mille .. – Venkat

+0

La cosa fondamentale è che 1) La classe 'Locale' non è un insieme di valori costanti; ha anche costruttori. 2) Tutto ciò che è è un identificatore per un locale; il vero lavoro è fatto in 'Currency.getInstance()'. – Raedwald

0

Ecco un metodo di utilità per avere il simbolo, qualunque sia il vostro locale

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 è semplice cosa u può fare,

float amount = 100000; 

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

    String moneyString = formatter.format(amount); 

    System.out.println(moneyString); 

L'uscita sarà, Rs.100.000,00.

+0

L'ho provato. Funziona bene – sebadagostino

+0

Funziona bene. Ma preferisco avere il simbolo della rupia invece di Rs. Qualche soluzione rapida? – Anand

Problemi correlati