บทความ
โปรแกรมบัญชีทศนิยมคลาดเคลื่อน
เกิดจากอะไร และป้องกันอย่างไร
เคยไหมที่ยอดรวมในรายงานต่างจากผลรวมรายการไป 0.01 บาท หรืองบทดลองไม่ลงตัวเพราะเศษสตางค์ ปัญหานี้ไม่ได้เกิดจากการคีย์ผิดเสมอไป หลายครั้งเกิดจากวิธีที่โปรแกรมเก็บและคำนวณตัวเลขเงิน
คำตอบสั้น: ทศนิยมคลาดเคลื่อนในโปรแกรมบัญชีเกิดจาก 2 สาเหตุหลัก คือการคำนวณเงินด้วยเลขทศนิยมลอยตัว (floating point) ซึ่งเก็บค่าอย่าง 0.1 ได้ไม่ตรง และการปัดเศษที่ไม่มีหลักเกณฑ์เดียวกันทั้งระบบ วิธีป้องกันคือคำนวณและเก็บเงินด้วยทศนิยมแบบแม่นยำ พร้อมกำหนดจำนวนทศนิยมและวิธีปัดให้ชัด
อาการของทศนิยมคลาดเคลื่อนในโปรแกรมบัญชี
ตัวเลขที่ต่างแค่สตางค์เดียวอาจดูไม่สำคัญ แต่ในงานบัญชีทุกยอดต้องกระทบกันได้ทุกสตางค์ เมื่อยอดไม่ตรง นักบัญชีต้องเสียเวลาไล่หาว่าผิดที่เอกสารใบไหน และยิ่งเอกสารมาก ยิ่งหายาก
- ยอดรวมท้ายเอกสารไม่เท่ากับผลรวมของแต่ละบรรทัด
- ยอดในรายงานต่างจากยอดในบัญชีแยกประเภทไป 0.01 บาท
- งบทดลองเดบิตกับเครดิตต่างกันเป็นเศษสตางค์
- ยอดลูกหนี้คงค้างเหลือเศษสตางค์ ทั้งที่ลูกค้าจ่ายครบแล้ว
สาเหตุที่ 1: floating point เก็บทศนิยมได้ไม่ตรง
คอมพิวเตอร์เก็บตัวเลขเป็นเลขฐานสอง ตัวเลขทศนิยมฐานสิบอย่าง 0.1 หรือ 0.2 แปลงเป็นฐานสองได้ไม่ลงตัว คล้ายกับที่ 1 ÷ 3 เขียนเป็นทศนิยมได้ไม่จบ เมื่อโปรแกรมใช้ชนิดตัวเลขแบบทศนิยมลอยตัว (floating point) ผลบวก 0.1 + 0.2 จึงได้ 0.30000000000000004 แทนที่จะเป็น 0.3 พอดี
- 0.1 + 0.2 ในระบบ floating point ได้ 0.30000000000000004
- ความคลาดเคลื่อนต่อรายการเล็กมาก แต่สะสมได้เมื่อมีเอกสารหลายพันใบ
- หน้าจอมักปัดตัวเลขให้ดูเรียบร้อย ผู้ใช้จึงไม่เห็นว่าค่าข้างในไม่ตรง
สาเหตุที่ 2: ปัดเศษไม่เป็นระบบเดียวกัน
แม้ตัวเลขจะเก็บได้ตรง ถ้าแต่ละหน้าจอปัดเศษคนละวิธีหรือคนละจุด ยอดก็ยังไม่ตรงกันได้ ตัวอย่างเช่น เอกสารมีสินค้า 3 บรรทัด แต่ละบรรทัดคำนวณได้ 10.005 บาท ถ้าปัดทีละบรรทัดแบบปัดครึ่งขึ้นจะได้บรรทัดละ 10.01 บาท รวม 30.03 บาท แต่ถ้ารวมก่อนแล้วค่อยปัดจะได้ 30.015 ปัดเป็น 30.02 บาท ต่างกัน 0.01 บาท ทั้งที่คำนวณถูกทั้งสองแบบ
- กำหนดจำนวนทศนิยมของราคา จำนวน และยอดเงินให้ชัด
- กำหนดว่าปัดทีละบรรทัดหรือปัดที่ยอดรวม แล้วใช้แบบเดียวกันทุกเอกสาร
- ผลต่างจากการปัดเศษต้องบันทึกให้เห็น ไม่ซ่อนไว้ในยอดอื่น
วิธีทดสอบว่าโปรแกรมบัญชีแม่นยำหรือไม่
ก่อนเลือกโปรแกรมบัญชี ให้ทดสอบด้วยตัวเลขที่มีเศษ ไม่ใช่ตัวเลขกลมอย่าง 100 หรือ 1,000 บาท เพราะตัวเลขกลมมักไม่เผยปัญหา
- ทดลองราคาที่มีเศษ เช่น 6.67 บาท คูณจำนวน 1.5 หน่วย
- บันทึกเอกสารหลายสิบใบ แล้วเทียบผลรวมกับรายงาน
- ตรวจงบทดลองว่าเดบิตรวมเท่ากับเครดิตรวมพอดี
- ถามผู้ขายว่าระบบเก็บเงินเป็นทศนิยมแบบแม่นยำหรือ floating point
BC Ai Account จัดการตัวเลขเงินอย่างไร
ยอดเงินในเอกสารและบัญชีแยกประเภทของ BC Ai Account คำนวณและจัดเก็บเป็นทศนิยมแบบแม่นยำ และมีการตรวจยอดดุลก่อนบันทึกรายการบัญชี
- ระบบไม่ยอมบันทึกรายการบัญชีที่ยอดเดบิตกับเครดิตไม่เท่ากัน รายการที่ไม่สมดุลจึงไม่หลุดเข้าไปอยู่ในบัญชี
- ทะเบียนสินทรัพย์ถาวรคำนวณค่าเสื่อมราคา (วิธีเส้นตรง) และลงบัญชีแยกประเภทได้ ลดการคำนวณและคีย์ตัวเลขเองทุกงวด
ขอบเขตนี้ครอบคลุมยอดเงินในเอกสารและบัญชีแยกประเภท หากต้องการทดสอบกับข้อมูลของกิจการ แนะนำให้ลองบันทึกเอกสารที่มีเศษทศนิยมตามวิธีด้านบนก่อนตัดสินใจ
คำถามที่พบบ่อย (FAQ)
ทำไม 0.1 + 0.2 ในคอมพิวเตอร์ไม่เท่ากับ 0.3
เพราะคอมพิวเตอร์เก็บตัวเลขเป็นเลขฐานสอง และ 0.1 กับ 0.2 แปลงเป็นฐานสองได้ไม่ลงตัว ระบบที่ใช้ floating point จึงได้ 0.30000000000000004 โปรแกรมบัญชีจึงควรคำนวณเงินด้วยทศนิยมแบบแม่นยำ
เศษสตางค์ไม่ตรงเกิดจากการคีย์ผิดหรือไม่
เกิดได้ทั้งจากการคีย์ผิด การคำนวณด้วย floating point และการปัดเศษคนละจุด ถ้าตรวจแล้วเอกสารคีย์ถูกทั้งหมด แต่ยอดยังต่างกันเป็นสตางค์ ควรตรวจวิธีคำนวณและปัดเศษของโปรแกรม
ยอดเงินใน BC Ai Account เก็บอย่างไร
ยอดเงินในเอกสารและบัญชีแยกประเภทคำนวณและจัดเก็บเป็นทศนิยมแบบแม่นยำ
ถ้าเดบิตไม่เท่ากับเครดิต BC Ai Account บันทึกได้หรือไม่
บันทึกไม่ได้ ระบบไม่ยอมบันทึกรายการบัญชีที่ยอดเดบิตกับเครดิตไม่เท่ากัน