คลาสหลักที่ใช้: java.text.decimalformat
1. ในการสร้างอินสแตนซ์วัตถุคุณสามารถใช้สองวิธีต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
DecimalFormat df = (decimalformat) numberFormat.getInstance ();
DecimalFormat DF1 = (DecimalFormat) DecimalFormat.getInstance ();
เพราะ Decimalformat สืบทอดมาจาก numberformat
2. ตั้งจำนวนทศนิยม
ระบบเริ่มต้นไปยังตำแหน่งทศนิยมคือ 3 เช่น:
การคัดลอกรหัสมีดังนี้:
DecimalFormat df = (decimalformat) numberFormat.getInstance ();
System.out.println (df.format (12.3456789));
เอาท์พุท: 12.346
ตอนนี้คุณสามารถตั้งค่าทศนิยมเป็นสองหลักด้วยวิธีต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
df.setMaximumFractionDigits (2);
System.out.println (df.format (12.3456789));
จากนั้นเอาต์พุตคือ: 12.35
3. มีสองวิธีในการแปลงตัวเลขเป็นเอาท์พุทเปอร์เซ็นต์:
(1)
การคัดลอกรหัสมีดังนี้:
df.applypattern ("##. ##%");
System.out.println (df.format (12.3456789));
System.out.println (df.format (1));
System.out.println (df.format (0.015));
ผลลัพธ์คือ: 1234.57% 100% 1.5%
(2)
การคัดลอกรหัสมีดังนี้:
df.setMaximumFractionDigits (2);
System.out.println (df.format (12.3456789*100)+"%");
System.out.println (df.format (1*100)+"%");
System.out.println (df.format (0.015*100)+"%");
ผลลัพธ์คือ:
1,234.57% 100% 1.5%
4. ตั้งค่าขนาดกลุ่ม
การคัดลอกรหัสมีดังนี้:
DecimalFormat DF1 = (DecimalFormat) DecimalFormat.getInstance ();
df1.setGroupingsize (2);
System.out.println (df1.format (123456789));
ผลผลิต: 1,23,45,67,89
นอกจากนี้คุณยังสามารถปิดการตั้งค่าการจัดกลุ่มโดย DF1.SetGroupingused (เท็จ);
การคัดลอกรหัสมีดังนี้:
DecimalFormat DF1 = (DecimalFormat) DecimalFormat.getInstance ();
df1.setGroupingsize (2);
DF1.SetGroupingUsed (เท็จ);
System.out.println (df1.format (123456789));
เอาท์พุท: 123456789
5. ตั้งทศนิยมเป็น 2 หลัก
การคัดลอกรหัสมีดังนี้:
DecimalFormat df2 = (decimalformat) Decimalformat.getInstance ();
df2.applypattern ("0.00");
System.out.println (df2.format (1.2));
เอาท์พุท: 1.20
บางครั้งเราต้องควบคุมรูปแบบของหมายเลขเอาต์พุต
บางทีคุณอาจไม่สนใจรูปแบบ แต่คุณต้องใส่ใจเกี่ยวกับโปรแกรมของคุณที่เป็นสากลทั่วโลก
System.out.println (1234.56);
ในสหรัฐอเมริกา "." เป็นจุดทศนิยม แต่ไม่จำเป็นต้องเป็นกรณีที่อื่น จะจัดการกับเรื่องนี้ได้อย่างไร?
แพ็คเกจบางอย่างในแพ็คเกจ Java.Text สามารถจัดการกับปัญหาประเภทนี้ได้ ตัวอย่างง่ายๆต่อไปนี้ใช้คลาสเหล่านั้นเพื่อแก้ปัญหาที่เกิดขึ้นข้างต้น:
การคัดลอกรหัสมีดังนี้:
นำเข้า Java.Text.NumberFormat;
นำเข้า java.util.locale;
ระดับสาธารณะ DecimalFormat1 {
โมฆะคงที่สาธารณะหลัก (String args []) {
// รับรูปแบบเริ่มต้นในพื้นที่
numberFormat nf1 = numberFormat.getInstance ();
System.out.println (nf1.format (1234.56));
// รับรูปแบบภาษาเยอรมัน
numberFormat nf2 =
numberFormat.getInstance (locale.german);
System.out.println (NF2.Format (1234.56));
-
หากคุณอยู่ในสหรัฐอเมริกาหลังจากเรียกใช้โปรแกรมแล้วเอาท์พุท:
1,234.56
1.234,56
กล่าวอีกนัยหนึ่งใช้นิสัยที่แตกต่างกันเพื่อแสดงตัวเลขในสถานที่ต่าง ๆ
เมธอด numberFormat.getInstance () ส่งคืนอินสแตนซ์ของ NumberFormat (จริง ๆ แล้วเป็นคลาสย่อยเฉพาะของ NumberFormat เช่น DecimalFormat) ซึ่งเหมาะสำหรับการจัดรูปแบบตัวเลขตามการตั้งค่าท้องถิ่น นอกจากนี้คุณยังสามารถใช้การตั้งค่าระดับภูมิภาคที่ไม่ได้รับการกำหนดค่าเช่นเยอรมนี วิธีการจัดรูปแบบจากนั้นจะจัดรูปแบบตัวเลขตามกฎภูมิภาคที่เฉพาะเจาะจง โปรแกรมนี้ยังสามารถใช้ในรูปแบบง่าย:
numberFormat.getInstance (). รูปแบบ (1234.56)
แต่การบันทึกรูปแบบแล้วนำกลับมาใช้ใหม่นั้นมีประสิทธิภาพมากขึ้น การทำให้เป็นสากลเป็นปัญหาใหญ่เมื่อจัดรูปแบบตัวเลข
อีกประการหนึ่งคือการควบคุมรูปแบบที่มีประสิทธิภาพเช่นการระบุจำนวนตัวเลขในส่วนที่เป็นเศษส่วน
การคัดลอกรหัสมีดังนี้:
นำเข้า java.text.decimalformat;
นำเข้า java.util.locale;
ระดับสาธารณะ DecimalFormat2 {
โมฆะคงที่สาธารณะหลัก (String args []) {
// รับรูปแบบเริ่มต้นในพื้นที่
DecimalFormat df1 = decimalformat ใหม่ ("###. 000");
System.out.println (df1.format (1234.56));
// รับรูปแบบภาษาเยอรมัน
locale.setdefault (locale.german);
DecimalFormat df2 = decimalformat ใหม่ ("###. 000");
System.out.println (df2.format (1234.56));
-
-
ในตัวอย่างนี้รูปแบบตัวเลขถูกตั้งค่าโดยใช้สัญลักษณ์เช่น "####. 000" โหมดนี้หมายความว่ามีตัวเลขสี่ตัวก่อนจุดทศนิยม เอาต์พุตโปรแกรม:
1234.560
1234,560
ในทำนองเดียวกันรูปแบบในรูปแบบเลขชี้กำลังสามารถควบคุมได้เช่น:
การคัดลอกรหัสมีดังนี้:
นำเข้า java.text.decimalformat;
ระดับสาธารณะ DecimalFormat3 {
โมฆะคงที่สาธารณะหลัก (String args []) {
DecimalFormat DF = decimalformat ใหม่ ("0.000E0000");
System.out.println (df.format (1234.56));
-
-
เอาท์พุท:
1.235E0003
สำหรับเปอร์เซ็นต์:
การคัดลอกรหัสมีดังนี้:
นำเข้า Java.Text.NumberFormat;
ชั้นเรียนสาธารณะ DecimalFormat4 {
โมฆะคงที่สาธารณะหลัก (String args []) {
numberFormat nf = numberFormat.getPercentInstance ();
System.out.println (nf.format (0.47));
-
-
เอาท์พุท:
47%
จนถึงตอนนี้คุณเคยเห็นเทคนิคต่าง ๆ สำหรับการจัดรูปแบบตัวเลข ในทางกลับกันฉันจะอ่านและแยกวิเคราะห์สตริงที่มีตัวเลขที่จัดรูปแบบได้อย่างไร การสนับสนุนความละเอียดรวมอยู่ใน numberFormat ตัวอย่างเช่น:
การคัดลอกรหัสมีดังนี้:
นำเข้า java.util.locale;
นำเข้า Java.Text.NumberFormat;
นำเข้า java.text.parseException;
ระดับสาธารณะ DecimalFormat5 {
โมฆะคงที่สาธารณะหลัก (String args []) {
// รูปแบบท้องถิ่น
numberFormat nf1 = numberFormat.getInstance ();
วัตถุ obj1 = null;
// การแยกวิเคราะห์ตามรูปแบบ
พยายาม {
obj1 = nf1.parse ("1234,56");
-
จับ (Parseexception E1) {
System.err.println (E1);
-
System.out.println (OBJ1);
// รูปแบบภาษาเยอรมัน
numberFormat nf2 =
numberFormat.getInstance (locale.german);
วัตถุ obj2 = null;
// การแยกวิเคราะห์ตามรูปแบบ
พยายาม {
obj2 = nf2.parse ("1234,56");
-
จับ (Parseexception E2) {
System.err.println (E2);
-
System.out.println (OBJ2);
-
-
ตัวอย่างนี้แบ่งออกเป็นสองส่วนซึ่งทั้งสองแยกวิเคราะห์สตริง: "1234,56" ส่วนแรกใช้รูปแบบท้องถิ่นเพื่อแยกวิเคราะห์ในขณะที่ส่วนที่สองใช้รูปแบบภาษาเยอรมันเพื่อแยกวิเคราะห์ เมื่อโปรแกรมทำงานในสหรัฐอเมริกาผลลัพธ์คือ:
123456
1234.56
กล่าวอีกนัยหนึ่ง "1234,56" ถือเป็นจำนวนเต็มจำนวนมากที่ 123456 ในสหรัฐอเมริกาและทศนิยมของ "1234.56" ในประเทศเยอรมนี
นอกจากนี้ยังมีคำถามสุดท้ายของการอภิปรายการจัดรูปแบบ ในตัวอย่างข้างต้นใช้ทั้ง decimalformat และ numberFormat DecimalFormat มักใช้เพื่อควบคุมรูปแบบที่ดีในขณะที่ NumberFormat มักใช้เพื่อระบุภูมิภาคที่แตกต่างจากท้องถิ่น จะรวมสองประเภทได้อย่างไร?
คำตอบหมุนรอบความจริงที่ว่า decimalformat เป็นคลาสย่อยของ numberformat ซึ่งมีการระบุอินสแตนซ์เป็นภูมิภาคเฉพาะ ดังนั้นคุณสามารถระบุภูมิภาคโดยใช้ numberFormat.getInstance แล้วหล่อโครงสร้างไปยังวัตถุ DecimalFormat เอกสารระบุว่าเทคนิคนี้สามารถนำไปใช้ในกรณีส่วนใหญ่ แต่คุณต้องใช้บล็อกลอง/จับเพื่อล้อมรอบนักแสดงในกรณีที่การแปลงไม่ทำงานอย่างถูกต้อง (น่าจะใช้พื้นที่แปลก ๆ ในสถานการณ์ที่ไม่น่ารำคาญมาก) นี่คือตัวอย่างเช่นนี้:
การคัดลอกรหัสมีดังนี้:
นำเข้า java.text.decimalformat;
นำเข้า Java.Text.NumberFormat;
นำเข้า java.util.locale;
ระดับสาธารณะ DecimalFormat6 {
โมฆะคงที่สาธารณะหลัก (String args []) {
DecimalFormat df = null;
// รับวัตถุ NumberFormat และ
// ส่งไปยังวัตถุ decimalformat
พยายาม {
df = (decimalformat)
numberFormat.getInstance (locale.german);
-
จับ (Classcastexception e) {
System.err.println (e);
-
// ตั้งค่าโหมดฟอร์แมต
df.applypattern ("####. 00000");
// จัดรูปแบบตัวเลข
System.out.println (df.format (1234.56));
-
-
วิธีการ getInstance () ได้รับรูปแบบจากนั้นเรียกใช้เมธอด ApplyPattern () เพื่อตั้งค่าโหมดรูปแบบและเอาต์พุต:
1234,56000
หากคุณไม่สนใจเกี่ยวกับความเป็นสากลคุณสามารถใช้ DecimalFormat โดยตรง