0Pricing
Java Academy · บทเรียน

การทำงานกับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดจึงไม่ใช้ double กับเงิน
  2. การทำงานกับ BigDecimal
  3. การปัดเศษและสเกล
  4. BigInteger สำหรับตัวเลขขนาดใหญ่
← กลับไปที่ Java Academy