web-dev-qa-db-ja.com

Javaで千単位の区切り文字を設定するには?

Javaで千単位の区切り文字を設定するには? BigDecimalの文字列表現があります。数千のセパレータを設定して文字列を返します。

113
Funtime

これは動作するはずです(JavaDocに基づいてテストされていません):

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

JavaDocによると、最初の行のキャストはほとんどのロケールで保存されるはずです。

97
Andreas_D

「、」でフォーマット関数を使用できます。

int no = 124750;
String str = String.format("%,d", no);

//str = 124,750

「、」には、ロケール固有のグループ化文字が含まれます。

ドキュメント

209
syloc
BigDecimal bd = new BigDecimal(300000);

NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));

System.out.println(formatter.format(bd.longValue()));

編集

スペースなどのカスタムグルーピングセパレータを取得するには、次の操作を行います。

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');

DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
49
adarshr

ブラジルで使用されているフォーマットにこのコードを試してください:

    DecimalFormat df = new DecimalFormat(
      "#,##0.00", 
      new DecimalFormatSymbols(new Locale("pt", "BR")));

    BigDecimal value = new BigDecimal(123456.00);

    System.out.println(df.format(value.floatValue()));

    // results: "123.456,00"
14
dellasavia
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');

String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);

String out = df.format(new BigDecimal(300000).doubleValue());

System.out.println(out);
5
Dead Programmer
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
4
Gab

受け入れられた答えは実際に変更する必要があります。 getDecimalFormatSymbolsは、防御的なコピーを作成します。副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example、

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

新しい行は次のとおりです。formatter.setDecimalFormatSymbols(symbols);

3
Amio.io

ために 小数

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));
2
akelec

整数データ型に桁区切り記号を使用している場合は、1を使用します。

  1. 整数データ型の場合

String.format( "%、d\n"、58625)および出力は58,625

  1. 浮動小数点データの場合、String.format( "%,. 2f"、58625.21)を入力すると、出力は58,625.21になります
0
Waqas Ahmed

前述のように、次の link は、Javaが番号をローカライズできるようにする特定の国コードを提供します。すべての国には独自のスタイルがあります。

上記のリンクには、ここに配置する国コードがあります。

...(new Locale(<COUNTRY CODE HERE>));

たとえば、スイスは次のように数値をフォーマットします。

1000.00-> 1'000.00

国コード

これを達成するために、次のcodesが私のために機能します:

NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));

結果は期待通りです:

1'000.00
0
0xjacobb