文字列の数値をコンマと丸めにフォーマットするにはどうすればよいですか?


142

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

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

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

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

回答:


256

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

この特定のケースでNumberFormatを使用する方法の例を示すことができますか?
Sheehan Alam

1
以下のソリューションも使用できます-public static String getRoundOffValue(double value){DecimalFormat df = new DecimalFormat( "##、##、##、##、##、##、## 0.00"); df.format(value)を返します。}
Jitendra Nath 2014

DecimalFormat formatter = new DecimalFormat( "#、## 0.00");のように、ポイントの前のゼロも好みます。-ゼロで.00を取得するのは間違っているようです
レオ

46

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


42

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

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

または

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

ロケール指定し、(たとえば)2桁に丸める方法
Jonik 2014

6
ああ、気にしないでそれを見つけた:new DecimalFormat("0.##", DecimalFormatSymbols.getInstance(locale))
Jonik

16

これがGoogleのナンバーワンの結果であるformat number commas javaとすると、整数を扱い、小数を気にしない人のために働く答えがここにあります。

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

出力:

2,000,000

floatでも機能します。たとえば、printf( "%、f \ n"、decimalNumber)
philwalk

12

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

それはサポートします:

  • カンマの書式設定例1234567は1,234,567になります。
  • 「千(K)、百万(M)、十億(B)、三兆(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);
}

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


2
これは、英語のみで作業している場合に適しています。私の提案は、彼らが理解できなかったとして、それは私の英語以外のユーザーの夕食を怒ってそのようなことを避けるためである何KM意味
rishabhmhjn

@rishabhmhjnしかし...必要な文字に変更するためにそれを微調整できませんでしたか?あなたの不運は彼のせいですか?:リンクは..今利用できない権利だにも関わらず、Oと彼が作成したが、かなりクールです
アクエリアスパワー

@AquariusPower問題は、たとえば、日本の数字がメートル法に従っていないことです。それらの数は、100の場合は1パーセント、1000の場合は1千、10000の場合は1万のようになり、1000,0000の場合は1千万になります。私のチームはJavaScriptで同様の作業を行っていました。これで説明されているロジックを使用できます:github.com/statusbrew/angular-bignumber
rishabhmhjn

これの古いコードを見つけたので、GitHubに再アップロードしました。コメントのリンクが更新されました。
Jeremy Trifilo

6
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

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

public static String getRoundOffValue(double value){

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

4

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

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

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


3

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

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


3

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

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

出力:10,987,655.88

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.