【问题标题】:Get the currency format for a country that does not have a Locale constant获取没有 Locale 常量的国家/地区的货币格式
【发布时间】:2010-03-30 10:34:35
【问题描述】:

我想获得印度的货币格式,所以我需要一个印度的Locale 对象。但是只有少数国家拥有Locale 常量(static final Locale),而印度不是其中之一。

要获取美国和英国的货币符号,我可以执行以下操作:

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

}

使用常量Locale.USLocale.UK。如果我想获取印度货币格式,我该怎么办?

【问题讨论】:

  • @Thilo:我该如何实现它?
  • @Thilo:工作正常。非常感谢..
  • @Venkats :把这个评论放在他的回答下面,否则他不会看到。
  • 注意:JDK 中的语言环境比 JRE 多。
  • @Thorbjørn Ravn Andersen:这很奇怪。他们为什么这样做?

标签: java currency


【解决方案1】:

根据JDK release notes,您有区域设置代码hi_IN(印地语)和en_IN(英语)。

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

【讨论】:

  • 关键是 1) Locale 类不是常量值的集合;它也有构造函数。 2)它只是一个地区的标识符;真正的工作是在Currency.getInstance() 中完成的。
【解决方案2】:

这是你可以做的简单的事情,

  float amount = 100000;

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

  String moneyString = formatter.format(amount);

  System.out.println(moneyString);

输出将为 100,000.00 卢比。

【讨论】:

  • 它工作正常。但我更喜欢卢比符号而不是卢比。有什么快速的解决方法吗?
  • 没有符号 RS。有什么解决方案可以得到这个值,比如 100,000.00
【解决方案3】:

我们必须为印度手动创建语言环境

Locale IND = new Locale("en", "IN");
NumberFormat india  = NumberFormat.getCurrencyInstance(IND);
int money = 3456
System.out.print(india.format(money));

输出 - 卢比。 3,456

【讨论】:

    【解决方案4】:

    这里有一个实用的方法来获得符号,不管你的语言环境是什么

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

    【讨论】:

      【解决方案5】:

      请看本指南:https://docs.oracle.com/javase/1.5.0/docs/guide/intl/locale.doc.html,印度印地语有 hi_IN

      【讨论】:

        【解决方案6】:
        import java.text.NumberFormat;
        import java.util.Locale;
        
        double dbValue = 1_23_23_213.89;
        Locale lcl = new Locale("hi","IN");
        NumberFormat inFrmt = NumberFormat.getNumberInstance(lcl);
        System.out.println(inFrmt.format(dbValue));      //12,323,213.89
        
        NumberFormat cur = NumberFormat.getCurrencyInstance(lcl);
        System.out.println(cur.format(dbValue));      // ₹12,323,213.89
        

        【讨论】:

        • 这可能会回答问题,请尝试提供一些详细信息以及问题的解决方案。
        猜你喜欢
        • 1970-01-01
        • 2013-08-18
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        相关资源
        最近更新 更多