java—基于不同语言环境的不同货币代码的格式化编号,其中输出将采用基于语言环境格式化的货币符号

ovfsdjhp  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(476)

语言:java问题:我需要用java手动设置货币代码。假设“usd”和locale可以是“fr ca”或“en\u us”,具体取决于登录的用户。我找不到解决办法,我们可以做的数字格式,通过设置手动货币和显示符号与数字输出。请注意,货币代码将与区域设置不同,反之亦然。
例如,如果我的货币是美元,那么基于不同的语言环境,数字应该格式化,输出应该如下所示$1300000.00-英语1.300.000,00$-双份1 300 000,00美元-波图圭语1 300 000,00美元-法国-加拿大
在下面进行了尝试,但没有给出预期的输出:

Currency currencyInstance1 = Currency.getInstance("USD"); // This can change based on the user input on the UI.
NumberFormat numberFormat4 = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH);
numberFormat4.setCurrency(currencyInstance1);
System.out.println(numberFormat4.format(amount4));

Actual output : 123 456,79 USD

**Expected output:**

For french canada:  1 300 000,00 $ US
For Portuguese : 1 300 000,00 US$
For Deutch : 1.300.000,00 $

Any help is appreciated.
jc3wubiy

jc3wubiy1#

java不支持跨语言环境的跨货币。

yzxexxkh

yzxexxkh2#

由于java的存在,国家代码是一个重要的语言环境组件。日期、时间、数字和货币的text.format对象对此元素特别敏感。国家代码为区域设置的语言组件添加了精确性。例如,法国和加拿大都使用法语。然而,两国的确切用法和惯用表达方式各不相同。这些差异可以通过不同的区域设置指示符来捕捉,其中只有国家代码不同。例如,代码fr\u ca(讲法语的加拿大)不同于fr\u fr(讲法语的法国)。
因此,如果我们需要获取符号,那么我们将需要创建一个带有区域设置和货币的Map。传递货币以获取符号,然后使用replace添加符号。

public static Map<Currency, Locale> currencyLocaleMap;

    static {
        currencyLocaleMap = new HashMap<>();
        List<Locale> availableLocales = 
        Arrays.asList(Locale.getAvailableLocales());

        List<Locale> supportedLocales = new ArrayList<>();
        supportedLocales.add(Locale.forLanguageTag("en-US"));

        List<Locale> filteredLocales = supportedLocales.stream().filter
                (eachLocale -> availableLocales.contains(eachLocale)).collect(Collectors.toList());
        System.out.println("UtilTemp : Locales supported : " + filteredLocales); 

        for (Locale locale : filteredLocales) {
            try {
                if(!locale.getCountry().isEmpty()){
                    Currency currency = Currency.getInstance(locale);
                    currencyLocaleMap.put(currency, locale); 
                }
            }
            catch (Exception e) {
            }
        }
    }

    public static String getCurrencySymbol(String currencyCode) {
        Currency currency = Currency.getInstance(currencyCode);
        System.out.println("UtilTemp :" +  currencyLocaleMap);
        return currency.getSymbol(currencyLocaleMap.get("USD"));
    }

相关问题