【问题标题】:How to get the pattern of Number Format of a specific locale?如何获取特定语言环境的数字格式模式?
【发布时间】:2014-04-26 03:43:24
【问题描述】:

我有一个简单的问题:

如何使用为特定语言环境创建的NumberFormat 获取用于格式化数字的模式,如下所示:

import java.util.Locale;

Locale aLocale = new Locale("fr","CA");
NumberFormat numberFormat=NumberFormat.getNumberInstance(aLocale);

这里我想知道French语言和Canada所在国家/地区的数字格式。

例如:

数字123456.7890在格式化后转换为123 456,789,表示上述区域设置的模式可能是# ###,###

【问题讨论】:

  • 你到底想要什么?它的字符串表示形式?
  • 不,我想知道为这种数字格式定义的模式。例如像这样#,###.00

标签: java locale number-formatting


【解决方案1】:

子类 DecimalFormat 和 ChoiceFormat 有一个 toPattern() 方法,因此必须使用 instanceof 进行检查并调用 toPattern()

  String pattern = null;
   if (numberFormat instanceof DecimalFormat) {
       pattern = ((DecimalFormat)numberFormat).toPattern();
   }

也考虑 DecimalFormat.toLocalizedPattern()

【讨论】:

    【解决方案2】:

    NumberFormat 是一个接口,因此可以有多个实现。

    public String getPattern(NumberFormat numberFormat) {
        if(numberFormat instanceof java.text.DecimalFormat)
            return ((java.text.DecimalFormat)numberFormat).toPattern();
        if(numberFormat instanceof java.text.ChoiceFormat)
            return ((java.text.ChoiceFormat)numberFormat).toPattern();
        throw new IllegalArgumentException("Unknown NumberFormat implementation");
    }
    

    请注意,这将在今天有效,但在未来添加其他实现时可能会中断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 2023-04-03
      • 1970-01-01
      • 2015-02-06
      • 2011-11-25
      • 1970-01-01
      相关资源
      最近更新 更多