web-dev-qa-db-ja.com

Java:Floatのフォーマットはロケールに依存します

私はベルギーに住んでいます。そして一般的に、数学では、次のように小数をコンマで書きます:3,141592
そして、それは私がformat floatの場合の結果でもあります。

_System.out.println(String.format("%f", 3.141592));
_

したがって、_._は_,_のように_3,141592_に置き換えられます。したがって、常にポイントが必要な場合は常に、次のようなものを追加する必要があります:String.format("%f", 3.14).replace(',','.');

だから、問題は:Javaのすべてのフォーマッターがコンマの代わりにポイントを使用するようにするロケールを変更する方法はありますか?

ありがとう


_System.out.println(Locale.getDefault());
_

プリント

_nl_BE
_
27

フォーマット中に使用するロケールを設定するだけの場合は、String.format(Locale.US, "%f", floatValue)を使用してみてください。

46
rodion

単純な解決策ですが、ロケール全体に広範囲に及ぶ場合は、システムのロケールを米国または英国に設定します。例。

Locale.setDefault(Locale.US);

質問を変更したので、ローカルを印刷方法で指定するだけです。

System.out.println(String.format(Locale.US, "%f", 3.141592));
9
Codemwnci

文字列を正確に出力するための多数のオプションが含まれている http://download.Oracle.com/javase/6/docs/api/Java/text/DecimalFormat.html を確認すると便利です。必要に応じてロケールを使用する

DecimalFormatは、10進数をフォーマットするNumberFormatの具象サブクラスです。西洋、アラビア語、インドの数字のサポートを含む、あらゆるロケールで数値を解析およびフォーマットできるように設計されたさまざまな機能があります。また、整数(123)、固定小数点数(123.4)、科学表記(1.23E4)、パーセンテージ(12%)、通貨金額($ 123)など、さまざまな種類の数値もサポートしています。これらはすべてローカライズできます。

多くの場合、カスタムルーチンを通じて入力と出力をルーティングすると便利です。これはJAMAライブラリからのものです(http://math.nist.gov/javanumerics/jama/)

   public void print (PrintWriter output, int w, int d) {
      DecimalFormat format = new DecimalFormat();
      format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
      format.setMinimumIntegerDigits(1);
      format.setMaximumFractionDigits(d);
      format.setMinimumFractionDigits(d);
      format.setGroupingUsed(false);
      print(output,format,w+2);
   }

これを使用することで、将来の問題や機能強化に確実に対処できるようになります。

7

数値のフォーマットについては、実際にはtoString()に依存しないでください。 NumberFormat、またはDecimalFormatのファクトリメソッドであるString.format()を使用すると、一部に依存することなく、数値のフォーマット方法(ロケールを選択して最初の2つ)を制御できます。グローバル設定。

1