Jawaban:
Ini harus bekerja (belum diuji, berdasarkan JavaDoc):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Menurut JavaDoc, para pemain di baris pertama harus disimpan untuk sebagian besar lokal.
getDecimalFormatSymbols()
mengatakan: Returns: a copy of the desired DecimalFormatSymbols
. Jadi sebaiknya Anda gunakan setDecimalFormatSymbols(theCopy)
setelah mengubah salinan.
new
dan mengaturnya kembali ke formatter: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
Anda dapat menggunakan fungsi format dengan ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," termasuk karakter pengelompokan khusus lokal.
.
sebagai pemisah?
format()
dengan lokal eksplisit ( Local.US
dikenal dengan penggunaan ,
sebagai pemisah) dan kemudian mengganti ,
dengan pemisah kustom Anda: String.format(Locale.US, "%,d", n).replace(',', '.')
.
int
. Atau a long
. Atau a BigInteger
. Dan gunakan f jika Anda ingin menggunakan double
, float
atau BigDecimal
.
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
EDIT
Untuk mendapatkan pemisah pengelompokan khusus seperti ruang, lakukan ini:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
objek dengan properti yang diinginkan dan menggunakannya untuk memformat BigDecimal
. A BigDecimal
hanya memiliki nilai yang ditentukan, itu tidak memiliki format yang ditentukan.
coba kode ini untuk memformat seperti yang digunakan di Brasil:
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"));
Kirim parameter ini untuk dilaporkan.
Jika Anda menggunakan ribuan pemisah untuk tipe data Integer gunakan 1.
String.format ("%, d \ n", 58625) dan output akan menjadi 58.625
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);
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
Jawaban yang diterima harus benar-benar diubah jika tidak berfungsi. The getDecimalFormatSymbols membuat salinan defensif. Jadi,
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Baris baru adalah ini: formatter.setDecimalFormatSymbols (simbol);
Untuk desimal :
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));
Seperti disebutkan di atas, tautan berikut memberi Anda kode negara tertentu untuk memungkinkan Jawa melokalisasi nomor tersebut. Setiap negara memiliki gayanya sendiri.
Pada tautan di atas Anda akan menemukan kode negara yang harus ditempatkan di sini:
...(new Locale(<COUNTRY CODE HERE>));
Swiss misalnya memformat angka-angka sebagai berikut:
1000,00 -> 1'000,00
Untuk mencapai hal ini, kode berikut berfungsi untuk saya:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
Hasilnya seperti yang diharapkan:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20