我正在使用 Locale(languageCode, countryCode) 构造函数将 BigDecimal 货币值转换为特定于语言环境的货币格式,如下面的代码所示

public static String formatCurrency(BigDecimal amount, String languageCode, String countryCode) {

    Format format = NumberFormat.getCurrencyInstance(new Locale(languageCode, countryCode));
    String formattedAmount = format.format(amount);
    logger.debug("Orginal Amount {} and Formatted Amount {}", amount, formattedAmount);
    return formattedAmount;
}

现在根据 Oracle Docs 的优秀资源



由于我的 languageCode 和 countryCode 是由用户输入的,当用户输入错误的输入时,我如何处理这种情况(或者说 NumberFormat.getCurrencyInstance 方法如何处理它),比如 languageCode = de 和 countryCode = US。

它是否默认为某些 Locale ?这种情况如何处理。

谢谢。

最佳答案

根据@artie 的建议,我使用 LocaleUtil.isAvailableLocale 来检查语言环境是否存在。如果它是一个无效的语言环境,我将它改为 en_US。这在一定程度上解决了问题。

但是,它仍然没有解决检查 NumberFormat 是否支持该 Locale 的问题。将接受解决此问题的任何其他答案。

   public static String formatCurrency(BigDecimal amount, String languageCode, String countryCode) {

        Locale locale = new Locale(languageCode, countryCode);
        if (!LocaleUtils.isAvailableLocale(locale)) {
            locale = new Locale("en", "US");
        }
        Format format = NumberFormat.getCurrencyInstance(locale);
        String formattedAmount = format.format(amount);
        logger.debug("Orginal Amount {} and Formatted Amount {}", amount, formattedAmount);
        return formattedAmount;
    }

关于java - 使用 Locale(languageCode, countryCode) 将 BigDecimal 格式化为 Locale 特定的货币字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46997969/

10-10 05:00