Java 获取没有区域设置常量的国家/地区的货币格式

Java 获取没有区域设置常量的国家/地区的货币格式,java,currency,Java,Currency,我想得到印度的货币格式,所以我需要一个印度的Locale对象。但只有少数几个国家拥有地区常量(静态最终地区),印度不是其中之一 要获取美国和英国的货币符号,我可以执行以下操作: public void displayCurrencySymbols() { Currency currency = Currency.getInstance(Locale.US); System.out.println("United States: " + currency.getSymbol())

我想得到印度的货币格式,所以我需要一个印度的
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.US
Locale.UK
。如果我想获得印度货币格式,我能做什么?

根据,您有印地语的地区代码
hi\u和英语的
en\u


请看本指南:印度印地语的
中有
hi_

这里有一个实用的方法来使用符号,无论您的语言环境是什么

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


    }
公共类Utils{
公共静态分类地图currencyLocaleMap;
静止的{
currencyLocaleMap=新树映射(新比较器(){
@凌驾
公共整数比较(货币c1、货币c2){
返回c1.getCurrencyCode().compareTo(c2.getCurrencyCode());
}
});
for(Locale:Locale.getAvailableLocales()){
试一试{
Currency=Currency.getInstance(区域设置);
currencyLocaleMap.put(货币、区域设置);
}
捕获(例外e){
}
}
}
公共静态字符串getCurrencySymbol(字符串currencyCode){
Currency Currency=Currency.getInstance(currencyCode);
返回currency.getSymbol(currencyLocaleMap.get(currency));
}
公共静态字符串getAmountAsFormattedString(双金额、双小数、字符串货币代码){
Currency Currency=Currency.getInstance(currencyCode);
双倍余额=0.00;
如果(金额!=null){
双倍余额=((双倍)金额)/数学功率(10.0,小数);
}
NumberFormat NumberFormat=NumberFormat.getCurrencyInstance(currencyLocaleMap.get(currency));
返回号码格式(双倍余额);
}
}

这是你能做的简单的事情

  float amount = 100000;

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

  String moneyString = formatter.format(amount);

  System.out.println(moneyString);
产量为100000.00卢比

导入java.text.NumberFormat;
导入java.util.Locale;
双dbValue=1_23_23_213.89;
语言环境lcl=新语言环境(“hi”、“IN”);
NumberFormat inFrmt=NumberFormat.getNumberInstance(lcl);
System.out.println(信息格式(dbValue))//12,323,213.89
NumberFormat cur=NumberFormat.getCurrencyInstance(lcl);
System.out.println(当前格式(dbValue));//₹12,323,213.89

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

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

输出-Rs.3456

@Thilo:我如何实现它?@Thilo:它工作正常。非常感谢。@Venkats:把这条评论放在他的答案下面,否则他看不到。注意:JDK中的语言环境比JRE中的要多。@Thorbjørn Ravn Andersen:这很奇怪。他们为什么这样做?关键是1)Locale
类不是常量值的集合;它也有构造函数。2) 它只是一个区域设置的标识符;真正的工作是在
Currency.getInstance()
中完成的。它工作正常。但是我更喜欢卢比符号而不是卢比。有什么快速解决方法吗?没有卢比符号。有没有任何解决方案可以获得100000.00这样的值?这可能回答了这个问题,请尝试提供一些详细信息和问题的解决方案。
Locale IND = new Locale("en", "IN");
NumberFormat india  = NumberFormat.getCurrencyInstance(IND);
int money = 3456
System.out.print(india.format(money));