2009-05-12 21 views
14

¿Cuál es la forma correcta de formatear la moneda si está formateando una moneda que no es la moneda nativa de la cultura actual?Formato de moneda adecuado cuando no se muestra la moneda nativa de una cultura

Por ejemplo, si estoy Formateo de dólares americanos para una cultura fr-FR puedo dar formato a ella como una cultura en-US ($ 1,000.00) o como una cultura fr-FR pero cambiando el símbolo del Euro a un dólar de EE.UU. símbolo (1 000,00 $). Tal vez algo más ($ 1 000,00 o 1 000,00 USD)?

+0

No debería pertenecer en algún otro sitio web SE ... tal Economía SE? http://economics.stackexchange.com/ ¿Cómo se relaciona esta pregunta con el alcance de StackOverflow? – rayryeng

Respuesta

27

No hay reglas absolutas aquí, pero un par de principios rectores:

  1. tratar de utilizar el formato de número para ese idioma (por ejemplo 1,000.00 en los EE.UU. se muestra como 1'000,00 en Alemania);
  2. Recuerde que diferentes monedas pueden usar el mismo símbolo (por ejemplo, $ es utilizado por dólares australianos y estadounidenses) y que hay many currency symbols;
  3. Si su sitio es moneda "única", simplemente use el símbolo correcto para esa moneda. Con esto me refiero a sitios como Amazon, sitios de viajes, sitios de compras, etc. Estos sitios son moneda única en el sentido de que son moneda única a la vez. No mostrarán Malaysian Ringits y Singapore Dollars al mismo tiempo, por ejemplo; y
  4. Si su sitio es multidivisa, no use el símbolo en absoluto: use el código de moneda estándar internacional de tres letras definido por ISO 4217 currency names and code elements. Los sitios como xe.com encajan en la categoría.
+0

Eliminé mi respuesta original ya que es mejor +1 – da5id

+0

Consejo muy claro: para los puntos 1 y 2, consulte aquí cómo hacerlo en C# http://stackoverflow.com/questions/1071273/currency-formatting/1071302 – Ryan

0

Si siempre desea mostrar el símbolo, aquí es una clase de utilidad:

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

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


}