จะตั้งค่าตัวคั่นหลักพันใน Java ได้อย่างไร?
ฉันมีการแสดงสตริงของ BigDecimal ที่ฉันต้องการจัดรูปแบบด้วยตัวคั่นหลักพันและส่งคืนเป็น String
จะตั้งค่าตัวคั่นหลักพันใน Java ได้อย่างไร?
ฉันมีการแสดงสตริงของ BigDecimal ที่ฉันต้องการจัดรูปแบบด้วยตัวคั่นหลักพันและส่งคืนเป็น String
คำตอบ:
สิ่งนี้ควรใช้งานได้ (ยังไม่ทดลองใช้ 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);
คุณสามารถใช้ฟังก์ชัน format กับ ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," ประกอบด้วยอักขระการจัดกลุ่มเฉพาะภาษา
.
เป็นตัวคั่น
format()
กับสถานที่เกิดเหตุอย่างชัดเจน ( Local.US
เป็นที่รู้จักกันที่จะใช้,
เป็นตัวคั่น) แล้วแทนที่ด้วยคั่นกำหนดเองของคุณ:,
String.format(Locale.US, "%,d", n).replace(',', '.')
int
. หรือกlong
. หรือกBigInteger
. และการใช้ฉถ้าคุณต้องการที่จะใช้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
. A มี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) และเอาต์พุตจะเป็น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);
คำตอบที่ได้รับการยอมรับจะต้องมีการเปลี่ยนแปลงจริง ๆ มิฉะนั้นจะไม่ทำงาน 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 (สัญลักษณ์);
สำหรับทศนิยม :
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>));
ตัวอย่างเช่นสวิตเซอร์แลนด์จัดรูปแบบตัวเลขดังนี้:
1,000.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