163

文字列として与えられた次の数値をフォーマットする最良の方法は何ですか?

String number = "1000500000.574" //assume my value will always be a String

これを値を持つ文字列にしたい:1,000,500,000.57

どうすればそのようにフォーマットできますか?

4

10 に答える 10

282

DecimalFormatクラスを見たいと思うかもしれません。さまざまなロケールをサポートしています (例: 一部の国では1.000.500.000,57代わりにフォーマットされます)。

また、その文字列を数値に変換する必要があります。これは次の方法で実行できます。

double amount = Double.parseDouble(number);

コードサンプル:

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");

System.out.println(formatter.format(amount));
于 2010-09-08T23:40:13.773 に答える
58

これは、String.format() を使用して実現することもできます。これは、1 つの文字列で複数の数値をフォーマットする場合に、より簡単かつ/またはより柔軟な場合があります。

    String number = "1000500000.574";
    Double numParsed = Double.parseDouble(number);

    System.out.println(String.format("The input number is: %,.2f", numParsed));
    // Or
    String numString = String.format("%,.2f", numParsed);

フォーマット文字列「%,.2f」の場合、「,」はコンマで区切られた数字グループを意味し、「.2」は小数点以下 2 桁に丸めることを意味します。

その他の書式設定オプションについては、 https://docs.oracle.com/javase/tutorial/java/data/numberformat.htmlを参照してください。

于 2016-10-11T18:35:13.640 に答える
44

文字列を数値に変換したら、次を使用できます

// format the number for the default locale
NumberFormat.getInstance().format(num)

また

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
于 2010-09-08T23:50:32.620 に答える
13

独自の書式設定ユーティリティを作成しました。これは、多くの機能を提供するとともに、フォーマットの処理が非常に高速です:)

以下をサポートします。

  • カンマ形式 例: 1234567 は 1,234,567 になります。
  • 「Thousand(K),Million(M),Billion(B),Trillion(T)」のプレフィックス。
  • 0 ~ 15 の精度。
  • 精度のサイズ変更 (6 桁の精度が必要であるが、使用可能な桁が 3 桁しかない場合は、強制的に 3 桁にすることを意味します)。
  • プレフィックスを下げる (選択したプレフィックスが大きすぎる場合は、より適切なプレフィックスに下げることを意味します)。

コードはここにあります。次のように呼び出します。

public static void main(String[])
{
   int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
   String formatted = ValueFormat.format(1234567, settings);
}

また、これは小数のサポートを処理しないことも指摘しておく必要がありますが、整数値には非常に役立ちます。上記の例では、出力として「1.23M」が表示されます。おそらく10進数のサポートを追加できますが、あまり使用されていないので、これを数学計算用の圧縮されたchar []配列を処理するBigIntegerタイプのクラスにマージすることもできます。

于 2012-10-27T19:01:20.490 に答える
6

以下のソリューションを使用することもできます

public static String getRoundOffValue(double value){
    DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
    return df.format(value);
}
于 2014-05-28T10:49:59.367 に答える
3

最初の回答は非常にうまく機能しますが、ZERO / 0 の場合は .00 としてフォーマットされます

したがって、フォーマット #,##0.00 は私にとってはうまく機能しています。本番システムにデプロイする前に、0 / 100 / 2334.30 や負の数値などのさまざまな数値を常にテストしてください。

于 2014-02-26T22:39:48.587 に答える