เมธอด numberFormat.getInstance () ส่งคืนอินสแตนซ์ของ NumberFormat (จริง ๆ แล้วเป็นคลาสย่อยเฉพาะของ NumberFormat เช่น DecimalFormat) ซึ่งเหมาะสำหรับการจัดรูปแบบตัวเลขตามการตั้งค่าท้องถิ่น นอกจากนี้คุณยังสามารถใช้การตั้งค่าระดับภูมิภาคที่ไม่ได้รับการกำหนดค่าเช่นเยอรมนี วิธีการจัดรูปแบบจากนั้นจะจัดรูปแบบตัวเลขตามกฎภูมิภาคที่เฉพาะเจาะจง โปรแกรมนี้ยังสามารถใช้ในรูปแบบง่าย:
numberFormat.getInstance (). รูปแบบ (1234.56)
แต่การบันทึกรูปแบบแล้วนำกลับมาใช้ใหม่นั้นมีประสิทธิภาพมากขึ้น การทำให้เป็นสากลเป็นปัญหาใหญ่เมื่อจัดรูปแบบตัวเลข
อีกประการหนึ่งคือการควบคุมรูปแบบที่มีประสิทธิภาพเช่นการระบุจำนวนตัวเลขในส่วนที่เป็นเศษส่วน นี่คือตัวอย่างง่ายๆในการแก้ปัญหานี้:
นำเข้า java.text.decimalformat; นำเข้า java.util.locale; คลาสสาธารณะ DecimalFormat2 {โมฆะคงที่สาธารณะหลัก (สตริง 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" โหมดนี้หมายความว่ามีสี่ตัวเลขก่อนจุดทศนิยม ถ้ายังไม่เพียงพอก็จะว่างเปล่า หากมีตัวเลขสามตัวหลังจากจุดทศนิยมมันจะเต็มไปด้วย 0. เอาต์พุตโปรแกรม:
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 {โมฆะคงที่สาธารณะหลัก (สตริง args []) {numberFormat nf = numberFormat.getPercentinstance (); system.out.println (nf.format (0.47));}}}}}}}}}} เอาท์พุท:
47%
จนถึงตอนนี้คุณเคยเห็นเทคนิคต่าง ๆ สำหรับการจัดรูปแบบตัวเลข ในทางกลับกันฉันจะอ่านและแยกวิเคราะห์สตริงที่มีตัวเลขที่จัดรูปแบบได้อย่างไร การสนับสนุนความละเอียดรวมอยู่ใน numberFormat ตัวอย่างเช่น:
นำเข้า java.util.locale; นำเข้า java.text.numberformat; นำเข้า java.text.parseException; ระดับสาธารณะ DecimalFormat5 {โมฆะคงที่สาธารณะหลัก (สตริง args []) {// รูปแบบท้องถิ่น numberFormat nf1 = numberFormat.getInstance (); วัตถุ obj1 = null; // การแยกวิเคราะห์ตามรูปแบบลอง {obj1 = nf1.parse ("1234,56"); } catch (parseexception e1) {system.err.println (e1); } system.out.println (obj1); // รูปแบบภาษาเยอรมัน NumberFormat NF2 = numberFormat.getInstance (locale.german); วัตถุ obj2 = null; // การแยกวิเคราะห์ตามรูปแบบลอง {obj2 = nf2.parse ("1234,56"); } catch (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 มักใช้เพื่อระบุภูมิภาคที่แตกต่างจากท้องถิ่น จะรวมสองประเภทได้อย่างไร?
คำตอบหมุนรอบความจริงที่ว่า 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); } catch (classcastexception e) {system.err.println (e); } // ตั้งค่าโหมดฟอร์แมต df.applypattern ("####. 00000"); // จัดรูปแบบตัวเลข system.out.println (df.format (1234.56)); - วิธีการ getInstance () ได้รับรูปแบบจากนั้นเรียกใช้เมธอด ApplyPattern () เพื่อตั้งค่าโหมดฟอร์แมตเอาต์พุต:
1234,56000
หากคุณไม่สนใจเกี่ยวกับความเป็นสากลคุณสามารถใช้ DecimalFormat โดยตรง
โดยที่ V เป็นคู่ที่ยังไม่ผ่านกระบวนการสเกลคือความแม่นยำที่ต้องการและส่งคืนคู่ที่ต้องใช้หลักทศนิยม
สาธารณะสแตติกสองรอบ (คู่ V, สเกล int) {ถ้า (สเกล <0) {โยน unlegalargumentException ใหม่ ("สเกลจะต้องเป็นจำนวนเต็มบวกหรือศูนย์"); } bigdecimal b = ใหม่ bigdecimal (double.toString (v)); BigDecimal One = New BigDecimal ("1"); return b.divide (หนึ่ง, scale, bigdecimal.round_half_up) .doublevalue (); - ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น