คำถาม:
เมื่อดำเนินการกับค่าสองประเภทสองประเภทบางครั้งอาจมีปัญหากับค่าผลลัพธ์ที่ผิดปกติ ตัวอย่างเช่น:
System.out.println (19.99+20); System.out.println (1.0-0.66); System.out.println (0.033*100); System.out.println (12.3/100);
เอาท์พุท:
39.9899999999999999995
0.3399999999999999999977
3.3000000000000003
0.123000000000000001
สารละลาย:
ประเภทจุดลอยตัวแบบง่ายลอยและสองเท่าใน Java ไม่สามารถดำเนินการได้เนื่องจากเป็นเรื่องปกติในกรณีส่วนใหญ่ แต่บางครั้งปัญหาดังที่แสดงข้างต้นเกิดขึ้น ปัญหานี้ไม่ใช่ข้อผิดพลาดใน Java เพราะตัวคอมพิวเตอร์เองเป็นไบนารีและตัวเลขจุดลอยตัวเป็นเพียงค่าโดยประมาณ ดังนั้นเมื่อแปลงจากเลขฐานสองเป็นเลขทศนิยมจุดลอยตัวความแม่นยำจะหายไปได้ง่ายทำให้เกิดความแม่นยำลดลง
เพื่อให้แน่ใจว่ามีความแม่นยำคุณต้องใช้คลาส BigDecimal และคุณไม่สามารถแปลงจากสองเท่าเป็น bigdecimal ได้โดยตรง คุณต้องแปลงสตริงเป็นสองเท่าจากนั้น bigdecimal นั่นคือคุณไม่สามารถใช้วิธี bigdecimal (double val) และคุณจะพบว่าไม่มีผล หากต้องการใช้วิธี BigDecimal (String Val) ตัวอย่างเฉพาะแสดงอยู่ด้านล่าง
ตัวอย่างของการดำเนินการสี่ประเภทสองประเภท:
1. เพิ่มขึ้น
สาธารณะคงที่แบบคงที่สองครั้ง (สอง A1, double b1) {bigdecimal a2 = ใหม่ bigdecimal (double.tostring (a1)); bigdecimal b2 = ใหม่ bigdecimal (double.tostring (b1)); ส่งคืน a2.add (b2) .doublevalue (); -2. การลบ
สาธารณะแบบคงที่สองส่วนย่อย (Double A1, Double B1) {BigDecimal A2 = ใหม่ BigDecimal (double.toString (A1)); bigdecimal b2 = ใหม่ bigdecimal (double.tostring (b1)); ส่งคืน a2.subtract (b2) .doublevalue (); -3. คูณ
Public Static Double Mul (Double A1, Double B1) {BigDecimal A2 = ใหม่ BigDecimal (double.tostring (A1)); bigdecimal b2 = ใหม่ bigdecimal (double.tostring (b1)); ส่งคืน a2.multiply (b2) .doublevalue (); -4. การสลายตัว
สาธารณะคงที่ double div (double a1, double b1, scale int) {ถ้า (scale <0) {โยน unlegalargumentException ใหม่ ("ข้อผิดพลาด"); } bigdecimal a2 = ใหม่ bigdecimal (double.toString (a1)); bigdecimal b2 = ใหม่ bigdecimal (double.tostring (b1)); ส่งคืน a2.divide (b2, สเกล, bigdecimal.round_half_up) .doublevalue (); -เมื่อพารามิเตอร์มาตราส่วนถูกแบ่งออกเป็นไม่สมบูรณ์ให้ระบุความแม่นยำ
การแก้ปัญหาการทำงานที่ผิดปกติของประเภทสองเท่าใน Java คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น