การทำงานกับ BigDecimal
การคำนวณเลขทศนิยมอย่างแม่นยำ
การทำงานกับ BigDecimal เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
การคำนวณทศนิยมอย่างแม่นยำ
BigDecimal จากแพ็กเกจ java.math ใช้แทนตัวเลขทศนิยมด้วยความแม่นยำที่กำหนดได้ตามต้องการและไม่มีข้อผิดพลาดจากการปัดเศษที่ซ่อนอยู่ จึงเป็นเครื่องมือมาตรฐานสำหรับการคำนวณทางการเงิน
การสร้าง BigDecimal
วิธีที่ปลอดภัยที่สุดในการสร้าง BigDecimal คือสร้างจากสตริง วิธีนี้จะรักษาหลักตัวเลขที่คุณป้อนไว้ได้อย่างครบถ้วน
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal amount = new BigDecimal("42.50");
System.out.println(amount);
}
}การไม่เปลี่ยนรูป
BigDecimal เป็นออบเจ็กต์ที่ไม่เปลี่ยนรูป การดำเนินการอย่าง add จะไม่เปลี่ยนค่าเดิม แต่จะคืนค่า BigDecimal ออบเจ็กต์ใหม่ คุณต้องเก็บค่าที่คืนไว้อย่างเหมาะสม
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("10");
a.add(new BigDecimal("5"));
System.out.println(a);
}
}การบวกและการลบ
ใช้ add และ subtract โดยอย่าลืมเก็บผลลัพธ์ไว้ การเรียกใช้แต่ละครั้งจะคืนค่าใหม่
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal price = new BigDecimal("19.99");
BigDecimal tax = new BigDecimal("1.60");
BigDecimal total = price.add(tax);
System.out.println(total);
}
}การคูณ
multiply ทำงานตามที่คาดไว้ โปรดสังเกตว่ามาตราส่วนของผลลัพธ์คือผลรวมของมาตราส่วนของตัวถูกดำเนินการ
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal unit = new BigDecimal("2.50");
BigDecimal qty = new BigDecimal("3");
System.out.println(unit.multiply(qty));
}
}การหารต้องใช้ความระมัดระวัง
การหารค่าที่หารไม่ลงตัว เช่น 1 หารด้วย 3 จะให้ทศนิยมไม่รู้จบ จากนั้น divide แบบปกติจะทำให้เกิด ArithmeticException
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal one = new BigDecimal("1");
BigDecimal three = new BigDecimal("3");
try {
System.out.println(one.divide(three));
} catch (ArithmeticException e) {
System.out.println("Need to specify rounding!");
}
}
}การหารพร้อมการปัดเศษ
ระบุมาตราส่วนและ RoundingMode เพื่อให้การหารปลอดภัย ในตัวอย่างนี้เราจะเก็บทศนิยมสองตำแหน่งและปัดเศษแบบครึ่งขึ้น
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal one = new BigDecimal("1");
BigDecimal three = new BigDecimal("3");
System.out.println(one.divide(three, 2, RoundingMode.HALF_UP));
}
}การเปรียบเทียบค่า
ใช้ compareTo เพื่อเปรียบเทียบค่าตัวเลข อย่าใช้ equals เพราะ equals จะพิจารณามาตราส่วนด้วย ดังนั้น 2.0 กับ 2.00 จึงไม่เท่ากันเมื่อใช้ equals แต่เท่ากันเมื่อใช้ compareTo
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("2.0");
BigDecimal b = new BigDecimal("2.00");
System.out.println(a.equals(b));
System.out.println(a.compareTo(b) == 0);
}
}ค่าคงที่ที่มีให้พร้อมใช้
BigDecimal มีค่าคงที่สำเร็จรูปให้ใช้ ได้แก่ BigDecimal.ZERO, BigDecimal.ONE และ BigDecimal.TEN ควรใช้ค่าเหล่านี้แทนการสร้างค่าเอง
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal sum = BigDecimal.ZERO;
sum = sum.add(BigDecimal.TEN);
System.out.println(sum);
}
}การหาผลรวมของรายการ
รูปแบบที่ใช้บ่อยคือเริ่มต้นจาก BigDecimal.ZERO แล้วบวกค่าแต่ละค่าในลูป โดยเก็บผลลัพธ์ไว้ทุกครั้ง
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal[] prices = {
new BigDecimal("1.10"),
new BigDecimal("2.20"),
new BigDecimal("3.30")
};
BigDecimal total = BigDecimal.ZERO;
for (BigDecimal p : prices) {
total = total.add(p);
}
System.out.println(total);
}
}แนวปฏิบัติที่ดี
จดจำหลักสำคัญเหล่านี้: สร้างค่าจากสตริง ถือว่าค่าเป็นออบเจ็กต์ที่ไม่เปลี่ยนรูป ระบุการปัดเศษสำหรับการหารเสมอ และเปรียบเทียบด้วย compareTo
ตรวจสอบอย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับ BigDecimal
ทบทวน
คุณได้เรียนรู้การใช้งาน BigDecimal:
- สร้างจากสตริงเพื่อรักษาหลักตัวเลขอย่างแม่นยำ
- เป็นออบเจ็กต์ที่ไม่เปลี่ยนรูป จึงต้องเก็บผลลัพธ์ของทุกการดำเนินการ
- ใช้
add,subtractและmultiplyได้โดยตรง divideต้องใช้มาตราส่วนและRoundingModeสำหรับผลลัพธ์ที่เป็นทศนิยมไม่รู้จบ- เปรียบเทียบด้วย
compareToไม่ใช่equals
คำถามที่พบบ่อย
บทเรียน “การทำงานกับ BigDecimal” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การทำงานกับ BigDecimal” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การทำงานกับ BigDecimal”
การคำนวณเลขทศนิยมอย่างแม่นยำ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การทำงานกับ BigDecimal” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงไม่ใช้ double กับเงิน
- การทำงานกับ BigDecimal
- การปัดเศษและสเกล
- BigInteger สำหรับตัวเลขขนาดใหญ่