语言: java问题:我需要在Java中手动设置货币代码。假设是"USD“,区域设置可以是"fr-CA”或"en_US“,这取决于登录的用户。我找不到解决方案,我们可以通过设置手动货币和在输出中显示带有数字的符号来进行数字格式。请注意,货币代码不会与区域设置相同,反之亦然。
例如,如果我的货币是USD,那么根据不同的语言环境,数字应该格式化,输出应该如下所示。$1, 300 ,000.00 -英语1.300.000,00 $-德语1 300 000,00美元- Potuguese 1 300 000,00 $ US -法国加拿大
下面尝试了一下,但没有给出预期的输出:
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.
发布于 2021-01-06 01:15:27
Java中不支持跨区域设置的交叉货币。
发布于 2021-01-06 21:02:41
由于java的存在,国家代码是一个重要的语言环境组件。日期、时间、数字和货币的text.Format对象对此元素特别敏感。国家/地区代码增加了区域设置的语言组件的精确度。例如,法国和加拿大都使用法语。然而,在这两个国家,精确的用法和惯用的表达方式是不同的。可以使用不同的区域设置指示符捕获这些差异,其中只有国家代码不同。例如,代码fr_CA (讲法语的加拿大)与fr_FR (讲法语的法国)是不同的。
因此,如果我们需要获取符号,那么我们将需要创建一个包含语言环境和货币的地图。传递货币以获取符号,然后使用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"));
}
https://stackoverflow.com/questions/65477238
复制相似问题