Подтвердить что ты не робот

Правильный формат валюты, когда не отображается национальная валюта культуры

Каков правильный способ форматирования валюты, если вы форматируете валюту, которая не является национальной валютой текущей культуры?

Например, если я форматирую доллары США для FR-FR-культуры, я отформатирую ее как культуру en-US ($1,000.00) или как fr-FR-культуру, но изменяя символ евро к символу доллара США ( 1 000,00 $). Возможно, что-то еще ( $1 000,00 или 1 000,00 долларов США)?

4b9b3361

Ответ 1

Здесь нет абсолютных правил, кроме нескольких руководящих принципов:

  • Попробуйте использовать формат номера для этого языкового стандарта (например, 1000,00 в США будут отображаться как 1 000,00 в Германии);
  • Помните, что разные валюты могут использовать один и тот же символ (например, $используется Австралией и Долларами США) и что много символов валюты;
  • Если ваш сайт является "единой" валютой, просто используйте правильный символ для этой валюты. Под этим я подразумеваю сайты, такие как Amazon, туристические сайты, торговые площадки и так далее. Эти сайты являются единой валютой в том смысле, что они одна валюта за раз. Например, они не будут показывать малайзийские звонки и сингапурские доллары; и
  • Если ваш сайт является мультивалютным, тогда не используйте символ вообще: используйте международный код валюты с тремя буквами, как определено ISO 4217 currency имена и элементы кода. Сайты, такие как xe.com, вписываются в категорию.

Ответ 2

Если вы всегда хотите отображать символ, вот вам класс утилиты:

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


}