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

问题描述 投票:0回答:7

我想获取印度的货币格式,所以我需要一个印度的

Locale
对象。但只有少数国家具有
Locale
常数(a
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.US
Locale.UK
。如果我想获得印度货币格式,我该怎么办?

java currency
7个回答
60
投票

根据 JDK 发行说明,您有区域设置代码

hi_IN
(印地语)和
en_IN
(英语)。

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

36
投票

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

  float amount = 100000;

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

  String moneyString = formatter.format(amount);

  System.out.println(moneyString);

输出将为 100,000.00 卢比。


5
投票

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

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

产量 - 卢比。 3,456


1
投票

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

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


    }

0
投票

查看本指南:https://docs.oracle.com/javase/1.5.0/docs/guide/intl/locale.doc.html,其中有

hi_IN
用于印度印地语


0
投票
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

0
投票

在 java 8 中您得到“Rs”,但在 java 15 中您得到卢比符号。我不知道如何在 java 15 中获取“Rs”。

© www.soinside.com 2019 - 2024. All rights reserved.