0

こんにちは、 NumberFormat.getInstance() のドキュメントのように数値をフォーマットするのに苦労しています。(Windows 7、NetBeans、Java 7)

私は最初に地域設定に入り、英語、英語キーボード、その他すべてを削除しました。すべてフランス語とフランスに設定しました。私も自分のPCを再起動しました。私のコードは次のとおりです。

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 を使用しているため、今後この種の問題を回避するための 2 つのヒント:

入力するとき

    Locale locale = new Locale(

続いて ctrl-space を押すと、NetBeans はそのステートメントの可能な補完のリストをポップアップ表示し、選択肢ごとに JavaDoc を表示する小さなウィンドウを表示します。

または、カーソルが上にあるLocaleときに Alt-F1 を押すか、右クリックして [JavaDoc を表示] すると、JavaDoc を含むブラウザ ウィンドウが表示されます。

Java のライブラリは十分に文書化されており、キーを 1 回押すだけで文書化できるため、時間を大幅に節約できます。

于 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 に答える