Java 默认语言环境和数字格式
嗨,我正在努力格式化数字,就像NumberFormat.getInstance()的文档所说的那样。 (Windows 7、NetBeans、Java 7) 我首先进入了区域设置,删除了美式英语、美式英语键盘和所有东西。我把它全部设定为法语和法语。我甚至重新启动了电脑。我的代码是: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
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
未正确初始化,这是造成一些问题的原因