web-dev-qa-db-ja.com

文字列番号をコンマとラウンドにフォーマットするにはどうすればよいですか?

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

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

値が1,000,500,000.57のStringにしたい

そのようにフォーマットするにはどうすればよいですか?

121
Sheehan Alam

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));
230

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

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

または

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
36
Aaron Novstrup

これは、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 を参照してください。

34
Greg H

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

以下をサポートします。

  • カンマの書式設定1234567は1,234,567になります。
  • 「千(K)、百万(M)、億(B)、兆(T)」という接頭辞。
  • 0から15の精度。
  • 精度のサイズ変更(6桁の精度が必要であるが、使用可能な数字が3桁しかない場合は3に強制されます)。
  • プレフィックスの低下(選択したプレフィックスが大きすぎる場合、より適切なプレフィックスに低下することを意味します)。

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

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

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

11
Jeremy Trifilo

これがformat number commas JavaのGoogleで一番の結果であることを考えると、整数で作業していて小数を気にしない人に役立つ答えがあります。

String.format("%,d", 2000000)

出力:

2,000,000
7
Ben Watson
public void convert(int s)
{
    System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}

public static void main(String args[])
{
    LocalEx n=new LocalEx();
    n.convert(10000);
}
6
user3314142

以下のソリューションも使用できます-

public static String getRoundOffValue(double value){

        DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
        return df.format(value);
}
5
Jitendra Nath

そこに到達する最も簡単な方法は次のとおりです。

String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result)); 

出力:10,987,655.88

3
John Paker

次のコードを使用して、変換全体を1行で実行できます。

String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));

DecimalFormatコンストラクターの最後の2つの#記号も0にすることができます。どちらの方法でも機能します。

3
Peter Griffin

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

したがって、#、## 0.00という形式はうまく機能しています。本番システムにデプロイする前に、常に0/100/2334.30や負の数などの異なる数をテストしてください。

2