回答:
これは動作するはずです(テストされていない、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によると、ほとんどのロケールでは、最初の行のキャストは保存する必要があります。
getDecimalFormatSymbols()
:Returns: a copy of the desired DecimalFormatSymbols
。したがってsetDecimalFormatSymbols(theCopy)
、コピーを変更してから使用する必要があります。
new
してフォーマッタに戻すことができると思います: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
"、"でフォーマット関数を使用できます。
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
「、」には、ロケール固有のグループ化文字が含まれます。
.
セパレータとして使用したい場合はどうなりますか?
format()
明示的なロケール(セパレーターとしてLocal.US
使用,
されることが知られている)で@Enissayを呼び出し,
、カスタムセパレーターに置き換えますString.format(Locale.US, "%,d", n).replace(',', '.')
。
int
。またはlong
。またはBigInteger
。そして、使用fはあなたが使用したい場合double
、float
またはBigDecimal
。
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()));
NumberFormat
目的のプロパティでオブジェクトを作成し、それを使用してをフォーマットしますBigDecimal
。にBigDecimal
は値が指定されているだけで、形式は指定されていません。
ブラジルで使用されるようにフォーマットするためにこのコードを試してください:
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"
parameters.put("REPORT_LOCALE", new Locale("pt", "BR"));
このパラメーターをレポートに送信します。
整数データ型に千の桁区切りを使用している場合は、1を使用します。
String.Formatの( "%、D \ n"、58625)と出力があろう58625
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);
受け入れられた答えは実際に変更されなければなりません。そうでなければ機能しません。getDecimalFormatSymbolsは守備のコピーを作成します。したがって、
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);
以下のための小数:
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));
上記のように、次のリンクはJavaが番号をローカライズできるようにする特定の国コードを提供します。どの国にも独自のスタイルがあります。
上記のリンクには、ここに配置する必要がある国コードがあります。
...(new Locale(<COUNTRY CODE HERE>));
たとえばスイスでは、数値を次のようにフォーマットします。
1000.00-> 1'000.00
これを達成するために、次のコードが私のために働きます:
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
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20