理解java.util.Locale的奇怪输出

时间:2012-11-26 16:37:59

标签: java format locale

我有一种感觉,Locale只是在适当的位置添加逗号,至少在数字的情况下。但我看到了我尝试过的不同输出。

我尝试了以下内容,

public static void main(String[] args) {
    DecimalFormat df = null;

    df = (DecimalFormat) DecimalFormat.getInstance(Locale.CHINESE);
    System.out.println("Locale.CHINESE "+df.format(12345.45));

    df = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
    System.out.println("Locale.GERMAN  "+df.format(12345.45));
}

输出:

Locale.CHINESE 12,345.45
Locale.GERMAN  12.345,45

如果仔细查看逗号,可以看到一个主要区别。

现在,javadoc for java.util.Locale

  

...需要Locale执行其任务的操作称为区域设置敏感,并使用Locale   为用户定制信息。例如,显示数字是区域设置敏感操作 - 数字   应按照格式进行格式化   用户所在国家,地区或文化的习俗/惯例......

我看到另一个Locale中的逗号被解释为小数点,这真是一个奇怪的事情,因为值正在改变。

所以,帮助我理解这一点。究竟是什么Locale?输出的急剧变化不会导致代码/数据出现重大问题吗?

2 个答案:

答案 0 :(得分:2)

  

我认为Locale只是在适当的位置添加逗号,至少在数字的情况下。

不,它会影响您使用的符号,如您所见。

  

所以,帮助我理解这一点。 Locale究竟是什么?输出的急剧变化不会导致代码/数据出现重大问题吗?

只有当你没有正确使用它们时:)机器对机器的通信通常应该进行本地化;通常,如果您确实需要使用文本,最好将US用作合理不变的语言环境。

有关特定于语言环境的更多详细信息,请参阅DecimalFormatSymbols

答案 1 :(得分:1)

我认为以上没有错。德语代表12345.45的方式是12.345,45
中国代表相同数字的方式是12,345.45。

  

所以,帮助我理解这一点。 Locale究竟是什么?不会激烈的   输出的变化会导致代码/数据出现重大问题吗?

不,你不会只需要跟踪输入的语言环境以及你希望它的格式化。