Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 默认语言环境和数字格式_Java_Localization - Fatal编程技术网

Java 默认语言环境和数字格式

Java 默认语言环境和数字格式,java,localization,Java,Localization,嗨,我正在努力格式化数字,就像NumberFormat.getInstance()的文档所说的那样。 (Windows 7、NetBeans、Java 7) 我首先进入了区域设置,删除了美式英语、美式英语键盘和所有东西。我把它全部设定为法语和法语。我甚至重新启动了电脑。我的代码是: System.setProperty("user.language", "fr"); System.setProperty("user.country", "FR"); System.setProperty("use

嗨,我正在努力格式化数字,就像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”。我还需要做什么?

比这容易多了

    Locale locale = Locale.FRENCH;
将使用法语区域设置初始化变量,并且

    java.text.NumberFormat nf = java.text.NumberFormat.getInstance(locale);
将为您获取该区域设置的数字格式

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

你打字的时候

    Locale locale = new Locale(
在ctrl-space之后,NetBeans将弹出该语句可能完成的列表,每个选项都有一个显示JavaDoc的小窗口

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


Java的库有很好的文档记录,只需一次击键就可以获得文档,这是一个真正的节省时间的方法。

比这容易多了

    Locale locale = Locale.FRENCH;
将使用法语区域设置初始化变量,并且

    java.text.NumberFormat nf = java.text.NumberFormat.getInstance(locale);
将为您获取该区域设置的数字格式

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

你打字的时候

    Locale locale = new Locale(
在ctrl-space之后,NetBeans将弹出该语句可能完成的列表,每个选项都有一个显示JavaDoc的小窗口

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

Java的库有很好的文档记录,只需一次击键就可以获得文档,这是一个真正的省时方法。

这就是问题所在:

Locale locale = new Locale("French", "France");
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();

}
应该是:

Locale locale = new Locale("fr", "FR");
或者只使用
Locale.FRENCH

此外,您不需要设置任何属性或更改默认区域设置。只需获取您感兴趣的区域设置的
NumberFormat

这就是问题所在:

Locale locale = new Locale("French", "France");
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();

}
应该是:

Locale locale = new Locale("fr", "FR");
或者只使用
Locale.FRENCH


此外,您不需要设置任何属性或更改默认区域设置。只需获取您感兴趣的区域设置的
NumberFormat

这是一个非常老的问题,但我想报告一下,我刚刚在OSX的JVM实现中发现了一个bug(仅限Mac)

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

Locale locale = new Locale("French", "France");
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

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

这是一个非常老的问题,但我想报告一下,我刚刚发现OSX的JVM实现中似乎存在一个bug(仅限Mac的bug)

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

Locale locale = new Locale("French", "France");
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
我是我的操作系统,我已经设置了,但是由于一个错误。JVM系统属性
user.language.format
未正确初始化,这是造成一些问题的原因