0

嗨,我正在努力像 NumberFormat.getInstance() 的文档所说的那样格式化数字。(Windows 7、NetBeans、Java 7)

我首先进入区域设置并删除了我们的英语,我们的英语键盘和所有内容。我将其全部设置为法语和法国。我什至重新启动了我的电脑。我的代码是:

System.setProperty("user.language", "fr");
System.setProperty("user.country", "FR");
System.setProperty("user.language.display", "fr");
System.setProperty("user.country.display", "FR");
System.setProperty("user.language.format", "fr");
System.setProperty("user.country.format", "FR");
Locale locale = new Locale("French", "France");
Locale.setDefault(locale);
Locale.setDefault(Locale.Category.DISPLAY, locale);
Locale.setDefault(Locale.Category.FORMAT, locale);
java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
System.out.println(nf.format(4.5));

尽管如此,程序仍会打印“4.5”。我不明白,对于法国法国,这应该是“4,5”。我还需要做什么?

4

3 回答 3

4

这就是问题:

Locale locale = new Locale("French", "France");

它应该是:

Locale locale = new Locale("fr", "FR");

或者只是使用Locale.FRENCH.

此外,您无需设置任何属性或更改默认语言环境。只需获取NumberFormat您感兴趣的语言环境。

于 2013-02-03T23:32:23.857 回答
2

这比那要容易得多...

    Locale locale = Locale.FRENCH;

将使用法语语言环境初始化变量,并且

    java.text.NumberFormat nf = java.text.NumberFormat.getInstance(locale);

将为您提供该语言环境的 NumberFormat。

编辑:当您使用 NetBeans 时,有两个提示可以避免将来出现此类问题:

当您键入

    Locale locale = new Locale(

紧随其后的是 ctrl-space NetBeans 将弹出该语句的可能完成列表,每个选项都有一个显示 JavaDoc 的小窗口。

或者,当光标位于 NetBeans 上Locale时,当您按 Alt-F1 或右键单击时,NetBeans 将打开一个带有 JavaDoc 的浏览器窗口,显示 JavaDoc。

Java 的库有很好的文档记录,只需按一下键就可以编写文档可以真正节省时间。

于 2013-02-03T23:32:16.383 回答
0

这是一个非常古老的问题,但我想报告我刚刚发现 OSX 的 JVM 实现中似乎是一个错误(仅限 Mac 的错误)。

这是显示问题的一小段代码:

public static void main(String[] args) {
    DecimalFormatSymbols d = DecimalFormatSymbols.getInstance(Locale.getDefault(Locale.Category.FORMAT));

    System.out.println(System.getProperty("user.language.format"));
    System.out.println(System.getProperty("user.language"));
    System.out.println(d.getDecimalSeparator());
    System.out.println(d.getGroupingSeparator());

    Locale l = Locale.getDefault();
    System.out.println("Language: "+l.getLanguage());
    System.out.println("Country: "+l.getCountry());
    System.out.println("Variant: "+l.getVariant());
    System.out.println("Tag: "+l.toLanguageTag());
    Currency c = Currency.getInstance(l);
    System.out.println("Code: "+c.getCurrencyCode());
    NumberFormat nc = DecimalFormat.getCurrencyInstance();
    NumberFormat ni = DecimalFormat.getNumberInstance();

}

就我而言,输出是:

en
es
.
,
Language: es
Country: ES
Variant: 
Tag: es-ES
Code: EUR

我的操作系统我设置了 es_ES 但由于一个错误。JVM 系统属性user.language.format未正确初始化,这是几个痛苦的根源。

于 2018-09-19T14:58:40.090 回答