不显示文化的本机货币时的适当货币格式

时间:2009-05-12 00:41:35

标签: formatting currency

如果您格式化的货币不是当前文化的本机货币,那么格式化货币的正确方法是什么?

例如,如果我为fr-FR文化格式化美元,我会将其格式化为en-US文化( $ 1,000.00 )或作为fr-FR文化,但更改欧元符号美元符号( 1 000,00 $ )。也许别的东西( $ 1 000,00 1 000,00 USD )?

2 个答案:

答案 0 :(得分:29)

这里没有绝对的规则,只有几条指导原则:

  1. 尝试并使用该区域设置的数字格式(例如,美国的1,000.00将在德国显示为1'000,00);
  2. 请记住,不同的货币可以使用相同的符号(例如$由澳大利亚元和美元使用)并且有many currency symbols;
  3. 如果您的网站是“单一”货币,那么只需使用该货币的正确符号即可。我的意思是亚马逊,旅游网站,购物网站等网站。这些网站是单一货币,因为它们一次只有一种货币。例如,他们不会同时展示马来西亚的Ringits和新加坡元;和
  4. 如果您的网站是多币种,则根本不要使用该符号:使用ISO 4217 currency names and code elements定义的国际标准三字母货币代码。 xe.com等网站属于该类别。

答案 1 :(得分:0)

如果您始终想要显示符号,则此处是实用程序类:

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


}