ตัวอย่างในบทความนี้อธิบายวิธีการทำงานของ BigDecimal ใน java แบ่งปันกับทุกคนสำหรับการอ้างอิงของคุณ การวิเคราะห์เฉพาะมีดังนี้:
เนื่องจาก double และ float ไม่แม่นยำเพียงพอ จึงต้องใช้ BigDecimal เมื่อทำการคำนวณเชิงพาณิชย์ วัตถุ BigDecimal ถูกสร้างขึ้นดังนี้:
คัดลอกรหัสดังต่อไปนี้: BigDecimal b = new BigDecimal("12.000001");
System.out.println(ข);
ผลลัพธ์ที่ได้คือ: 12.000001;
BigDecimal สามารถส่งผ่านใน String และเพิ่มเป็นสองเท่าเมื่อสร้างมัน แต่วิธีที่ดีที่สุดคือใช้ String สำหรับเหตุผล เพียงแค่ดูโค้ดต่อไปนี้:
คัดลอกรหัสดังต่อไปนี้: BigDecimal b = new BigDecimal("12.000001");
System.out.println(ข);
BigDecimal c = BigDecimal ใหม่ (12.01);
System.out.println(c);
ผลการวิ่งคือ:
12.000001
12.009999999999997868371792719699442386627197265625
จะเห็นได้ว่าความแม่นยำจะหายไปเมื่อมีการส่งผ่านสองเท่า
การดำเนินการอื่น ๆ ของ BigDecimal มีดังนี้:
คัดลอกโค้ด รหัสจะเป็นดังนี้: //เพิ่มเติม
เพิ่ม BigDecimal สาธารณะแบบคงที่ (สตริง num1, สตริง num2) {
BigDecimal bd1 = BigDecimal ใหม่ (num1);
BigDecimal bd2 = BigDecimal ใหม่ (num2);
กลับ bd1.add(bd2);
-
//ลบ
ลบ BigDecimal สาธารณะแบบคงที่ (สตริง num1, สตริง num2) {
BigDecimal bd1 = BigDecimal ใหม่ (num1);
BigDecimal bd2 = BigDecimal ใหม่ (num2);
กลับ bd1.subtract (bd2);
-
//การคูณ
BigDecimal สาธารณะคงที่คูณ (สตริง num1, สตริง num2) {
BigDecimal bd1 = BigDecimal ใหม่ (num1);
BigDecimal bd2 = BigDecimal ใหม่ (num2);
กลับ bd1.คูณ (bd2);
-
//แผนก
สาธารณะ BigDecimal แบ่งคงที่ (สตริง num1, สตริง num2, int i) {
BigDecimal bd1 = BigDecimal ใหม่ (num1);
BigDecimal bd2 = BigDecimal ใหม่ (num2);
// i คือจำนวนหลักที่จะคงไว้ BigDecimal.ROUND_HALF_UP แสดงถึงกฎการปัดเศษ
กลับ bd1.divide (bd2, i, BigDecimal.ROUND_HALF_DOWN);
-
จำเป็นต้องเน้นการแบ่งส่วน พารามิเตอร์ที่สามคือการปัดเศษหรือไม่
ROUND_HALF_DOWN หมายความว่า 1 จะไม่ถูกป้อนเมื่อพบ 5 นั่นคือ 1.5->1;
ROUND_HALF_UP หมายความว่าเมื่อพบ 5 จะป้อน 1 นั่นคือ 1.5->2;
แต่มีบางสิ่งที่ควรทราบ:
เมื่อเราใช้ ROUND_HALF_DOWN ให้คัดลอกโค้ดดังนี้: System.out.println(this.divide("67.75", "5",4));
System.out.println(this.divide("67.75", "5",1));
System.out.println("-------");
System.out.println(this.divide("67.751", "5",4));
System.out.println(this.divide("67.751", "5",1));
ผลการวิ่งมีดังนี้:
13.5500
13.5
-
13.5502
13.6
ฉันสับสน ตามตรรกะแล้วผลลัพธ์ที่สองควรเป็น 13.5! ทำไมมันกลายเป็น 13.6? หลังจากการทดสอบหลายครั้ง ฉันคิดและพบว่าการปัดเศษนี้ไม่ได้ขึ้นอยู่กับการเปลี่ยนแปลงหลังหลักความแม่นยำและเปรียบเทียบกับ 5 แต่ข้อมูลทั้งหมดหลังหลักความแม่นยำจะถูกเปรียบเทียบกับ 5 กล่าวอีกนัยหนึ่ง: 13.5500 นั้นแม่นยำถึง หนึ่งหลักแล้วใช้ 0.0500 เปรียบเทียบกับ 5 และ 13.5502 แม่นยำเป็นหนึ่งหลัก แล้วใช้ 0.0502 เปรียบเทียบกับ 5 มันมากกว่า 5 จึงปิดขึ้นด้านบน
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน