Làm cách nào để thiết lập hàng nghìn dấu phân cách trong Java?
Tôi có đại diện Chuỗi của BigDecimal mà tôi muốn định dạng bằng dấu phân cách hàng nghìn và trả về dưới dạng Chuỗi.
Làm cách nào để thiết lập hàng nghìn dấu phân cách trong Java?
Tôi có đại diện Chuỗi của BigDecimal mà tôi muốn định dạng bằng dấu phân cách hàng nghìn và trả về dưới dạng Chuỗi.
Câu trả lời:
Điều này sẽ hoạt động (chưa được kiểm tra, dựa trên JavaDoc):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Theo JavaDoc, các diễn viên trong dòng đầu tiên nên được lưu cho hầu hết các địa phương.
getDecimalFormatSymbols()
biết : Returns: a copy of the desired DecimalFormatSymbols
. Vì vậy, bạn nên sử dụng setDecimalFormatSymbols(theCopy)
sau khi thay đổi bản sao.
new
và đặt nó trở lại định dạng: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
Bạn có thể sử dụng chức năng định dạng với ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," Bao gồm các ký tự nhóm cụ thể theo miền địa phương.
.
một dấu phân cách thì sao?
format()
với một miền địa phương rõ ràng ( Local.US
được biết là sử dụng ,
như một dấu phân cách) và sau đó thay thế ,
bằng dấu tách tùy chỉnh của bạn : String.format(Locale.US, "%,d", n).replace(',', '.')
.
int
. Hoặc a long
. Hoặc a BigInteger
. Và sử dụng f nếu bạn muốn sử dụng double
, float
hoặc BigDecimal
.
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
BIÊN TẬP
Để có được phân tách nhóm tùy chỉnh như không gian, hãy làm điều này:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
đối tượng với các thuộc tính mong muốn và sử dụng nó để định dạng của bạn BigDecimal
. A BigDecimal
chỉ có một giá trị được chỉ định, nó không có định dạng cụ thể.
thử mã này để định dạng như được sử dụng ở Brazil:
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"));
Gửi tham số này để báo cáo.
Nếu bạn đang sử dụng dấu phân cách nghìn cho kiểu dữ liệu Integer, hãy sử dụng 1.
String.format ("%, d \ n", 58625) và đầu ra sẽ là 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);
Câu trả lời được chấp nhận phải được thực sự thay đổi nếu không không hoạt động. Các getDecimalFormatSymbols tạo một bản sao phòng thủ. Như vậy
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Dòng mới là dòng này: formatter.setDecimalFormatSymbols (ký hiệu);
Đối với số thập phân :
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));
Như đã đề cập ở trên, liên kết sau cung cấp cho bạn mã quốc gia cụ thể để cho phép Java bản địa hóa số. Mỗi quốc gia có phong cách riêng của mình.
Trong liên kết ở trên, bạn sẽ tìm thấy mã quốc gia nên được đặt ở đây:
...(new Locale(<COUNTRY CODE HERE>));
Thụy Sĩ ví dụ định dạng các số như sau:
1000,00 -> 1'000,00
Để đạt được điều này, các mã sau hoạt động với tôi:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
Kết quả như mong đợi:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20