ใครมีความรู้เกี่ยวกับการเขียนจาวา ช่วยตอบข้อสงสัยหน่อยครับ

ผมสงสัยว่าโปรแกรมที่ผมเขียนมานี้
public class Test {
    public static void main(String[] args) {
        double x = 14.56 ;
        double y = 14.00 ;
        double z = x - y ;
        System.out.print(z);
        }
}
ทำไมผลลัพธ์ z ออก มาเป็น 0.5600000000000005 ครับ งง
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
ในภาษาคอมพิวเตอร์จะเก็บเลขในรูปแบบเลขฐานสองครับ
แต่เนื่องจาก 14.56 ไม่สามารถแปลงเป็นเลขฐานสองได้เป๊ะๆ คอมพิวเตอร์จึงทำได้แค่เก็บค่าประมาณ (มันจะเท่ากับ 2^3 + 2^2 + 2^1 + 2^-1 + 2^-5 + 2^-6 +.... จนถึงเท่าที่ตัวแปรประเภท double เก็บได้)
ซึ่งในกรณีนี้มีค่าเท่ากับ 14.5600000000000005
แต่พอมีการนำค่าที่เก็บแบบประมาณนี้ไปใช้คำนวณต่อ ตัวโปรแกรมก็ไม่สามารถแยกได้แล้วว่า 14.5600000000000005 นี่คือค่าประมาณของ 14.56 หรือเป็นค่าที่ตั้งใจเก็บจริงๆกันแน่

เรื่อง floating point number เป็นเรื่องมาตรฐานที่โปรแกรมเมอร์ทุกคนต้องรู้ไว้ในอนาคตนะครับ

ส่วนถ้าคุณอยากแสดงเลขให้เป็นทศนิยมสองหลัก ก็ต้องปัดเศษเอาตอน "แสดงผล" (อย่าไปปัดเศษใส่ตัวแปร double ล่ะ เพราะมันก็จะผิดตอนแสดงผลอยู่ดี)

System.out.format("%.2f", z);
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่