13

文字列をフォーマットして、3 桁のグループの間にコンマを追加しようとしています

例えば:

1200.20 >> 1,200.20
15000   >> 15,000

私は DecimalFormat でそれを行う方法を理解しようとしていますが、この時点まで、非常に複雑に見える独自のスクリプトを使用しています。# を使用すると末尾のゼロが非表示になり、 0 を使用すると数値に追加されます。

これは私が今試していることです:

DecimalFormat df = new DecimalFormat("###,###.####", new DecimalFormatSymbols(Locale.US));
resultStr = df.format(Double.valueOf(resultStr));

簡単だと思いますが、どうすればいいのかわかりません。私は DecimalFormat でそれを行う必要はありません。それがより簡単な方法だと思っただけです。小数を変更せずにカンマを追加するにはどうすればよいですか?

4

5 に答える 5

21

NumberFormat オブジェクトを使用し、グループ化を使用するように設定する必要があります。何かのようなもの

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class NumberFormatEg {
   public static void main(String[] args) {
      NumberFormat myFormat = NumberFormat.getInstance();
      myFormat.setGroupingUsed(true);

      double[] numbers = { 11220.00, 232323232.24, 121211.55, 102.121212 };

      for (double d : numbers) {
         System.out.println(myFormat.format(d));
      }
      System.out.println();

      DecimalFormat decimalFormat = new DecimalFormat("#.00");
      decimalFormat.setGroupingUsed(true);
      decimalFormat.setGroupingSize(3);

      for (double d : numbers) {
         System.out.println(decimalFormat.format(d));
      }

      System.out.println("\nFor Germany");

      NumberFormat anotherFormat = NumberFormat
            .getNumberInstance(Locale.GERMAN);
      if (anotherFormat instanceof DecimalFormat) {
         DecimalFormat anotherDFormat = (DecimalFormat) anotherFormat;
         anotherDFormat.applyPattern("#.00");
         anotherDFormat.setGroupingUsed(true);
         anotherDFormat.setGroupingSize(3);

         for (double d : numbers) {
            System.out.println(anotherDFormat.format(d));
         }

      }

      System.out.println("\nFor US:");

      anotherFormat = NumberFormat.getNumberInstance(Locale.US);
      if (anotherFormat instanceof DecimalFormat) {
         DecimalFormat anotherDFormat = (DecimalFormat) anotherFormat;
         anotherDFormat.applyPattern("#.00");
         anotherDFormat.setGroupingUsed(true);
         anotherDFormat.setGroupingSize(3);

         for (double d : numbers) {
            System.out.println(anotherDFormat.format(d));
         }

      }
   }
}

戻り値:

11,220
232,323,232.24
121,211.55
102.121

11,220.00
232,323,232.24
121,211.55
102.12

For Germany
11.220,00
232.323.232,24
121.211,55
102,12

For US:
11,220.00
232,323,232.24
121,211.55
102.12

これの利点は、ソリューションをロケール固有にすることができることです。

Edited
Now は、DecimalFormat オブジェクトの例を示しています。これを使用する場合は、グループ化サイズを設定する必要があることに注意してください。

于 2013-03-10T22:46:00.337 に答える
14

次のようなものを試すこともできます

DecimalFormat df = new DecimalFormat("#,###.00");

System.out.println(df.format(1200.20));
System.out.println(df.format(15000));
System.out.println(df.format(123456789.99));
1,200.20
15,000.00
123,456,789.99
于 2013-03-10T22:55:02.583 に答える
2

あなたが望むことを正確に行うことができるはずです:

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

DecimalFormat myFormatter = new DecimalFormat("$###,###.###");
String output = myFormatter.format(12345.67);
System.out.println(value + " " + pattern + " " + output);
于 2013-03-10T22:49:43.050 に答える
1

他のソリューションを機能させることができませんでした.一部は小数を丸め、一部は末尾のゼロを追加し、一部は末尾のゼロを削除しました.

私は自分の答えを受け入れるつもりはありませんが、誰かが役に立つと思った場合に備えてスクリプトを投稿します.

public void(String str) {
    int floatPos = str.indexOf(".") > -1 ? str.length() - str.indexOf(".") : 0;
    int nGroups= (str.length()-floatPos-1-(str.indexOf("-")>-1?1:0))/3;
    for(int i=0; i<nGroups; i++){
        int commaPos = str.length() - i * 4 - 3 - floatPos;
    str = str.substring(0,commaPos) + "," + str.substring(commaPos,str.length());
    }
    return str;
}


1             => 1
1.0           => 1.0
1234.01       => 1,234.01
1100100.12345 => 1,100,100.12345
于 2013-03-11T00:02:06.873 に答える