คุณเคยเจอ “ผีหลอก” ใน Excel ไหม? [Number Precision Limit]

“ผมว่าออฟฟิศเรามีผีครับพี่”
“เฮ้ย! โจ้เจอเหรอ?” ผมหันขวับ

“คือเมื่อคืนผมนั่งทำงานถึงห้าทุ่ม ตอนนั้นทั้งออฟฟิศเหลือผมคนเดียว ผมก็รีบปั่นงานจนเหลือแค่ใส่ตัวเลข พอคีย์ลงใน Excel ตัวเลขหายไปเฉยเลย!”
“ตัวเลขหายไป?”
“ใช่ครับ พิมพ์ ๆ อยู่ พอกดเอ็นเทอร์ตัวเลขดันกลายเป็นศูนย์”
“ตัวเลขกลายเป็นศูนย์?”

“ใช่ครับ ผมลองคีย์ตัวเลขใหม่ มันก็ยังหาย หายตรงจุดสุดท้ายเหมือนเดิม”

“แล้วโจ้ทำไง?”
“ทำไง ก็งงดิพี่ แล้วตอนนั้นปรินต์เตอร์ข้าง ๆ ดันปรินต์ขึ้นมาเอง เสียงดัง ฟึ่บ ฟึ่บ ฟึ่บ ผมปิดคอมพ์วิ่งกลับบ้านเลย”
“ปรินต์เตอร์ปรินต์เองตอนห้าทุ่ม?”
“ใช่พี่ นึกตอนนี้ยังขนลุกเลยอ่ะ”
โจ้พูดแล้วเอานิ้วลูบแขนซ้าย
“พี่คิดว่าเจอ “ผี” ของโจ้แล้วล่ะ”

“ตัวเลขที่โจ้ใส่ คือเลขบัตรเครดิตใช่ไหม?” ผมถามกลับ
“เฮ้ย! พี่รู้ได้ไง?”
“ที่ว่าเลขหาย มันไม่ได้หาย แต่ตัวเลขหลักที่ 16 มันเปลี่ยนเป็นเลข 0 ใช่ไหม?”
“ใช่เลย ทำไมพี่รู้?”
“พี่ยังรู้ชื่อ “ผี” ตนนั้นด้วยนะ”
“ชื่ออะไรพี่?”
“ชื่อ Number Precision Limit

เลขบัตรเครดิตที่โจ้พิมพ์ใน Excel คือ
4784489579420097 (16 หลัก)
ก่อนกดเอ็นเทอร์ เลขหลักสุดท้ายคือ 7

แต่พอกดเอ็นเทอร์ เลขหลักสุดท้าย (7) ดันเปลี่ยนเป็น 0!

ลองคีย์เลขบัตรอื่น ก็ได้เลขตัวสุดท้ายเป็นศูนย์ตลอด

ทั้งที่เซ็ต Format Cells ของคอลัมน์นั้นเป็น Number แล้ว

อาการนี้คือข้อจำกัดของ Excel ที่เรียกว่า Number Precision Limit

Number Precision คืออะไร?

Number Precision คือความละเอียดของตัวเลขที่รองรับได้
Excel มีลิมิตของ Number Precision ที่ 15 digits
หรือ Excel รองรับตัวเลขได้ละเอียดสูงสุด 15 หลัก

ถ้ามีหลักที่ 16 ตัวเลขหลักสุดท้ายจะถูกเปลี่ยนเป็นศูนย์
ถ้ามีหลักที่ 17 ตัวเลขสองหลักสุดท้ายจะถูกเปลี่ยนเป็นศูนย์
พูดง่าย ๆ คือถ้ามีมากกว่า 15 หลัก ตัวเลขตั้งแต่หลักที่ 16 จะถูกเปลี่ยนเป็น 0

เลขบัตรเครดิตมี 16 หลัก หลักสุดท้ายจึงถูกเปลี่ยนเป็น 0 ด้วยเหตุผลนี้

“ทำไมเค้าถึงเซ็ตละเอียดแค่ 15 หลักล่ะครับ?” โจ้ถาม

เพราะการเซ็ต Number Precision มีผลต่อความเร็วในการประมวลผล
ถ้าเซ็ต Number Precision เยอะ ๆ จะทำให้ประมวลผลช้าลง

15 หลัก ไม่ใช่น้อย ๆ นะ ถ้าคิดเป็นจำนวนคือ ร้อย-ล้าน-ล้าน
คงไม่มียอดขายบริษัทไหนสูงขนาดนี้ ^^

จำกัดตัวเลขที่ 15 หลักก็จริง แต่ไม่ได้แปลว่า Excel คำนวณตัวเลขเยอะ ๆ ไม่ได้
ยังคำนวณได้ เพียงแต่ความละเอียดจะได้แค่ 15 หลักแรกเท่านั้น

ลองนึกภาพ ถ้าเราคำนวณตัวเลขระดับ พัน-ล้าน-ล้าน แล้วผิดไปแค่ 10 คงไม่เป็นไร
อีกอย่าง คนที่คำนวณตัวเลขเยอะขนาดนี้คงไม่ใช่คนทั่วไป น่าจะเป็นนักคณิตศาสตร์ นักฟิสิกส์ หรือนักดาราศาสตร์ เค้าสนใจตัวเลขระดับล้าน ไม่สนใจตัวเลขระดับสิบ ระดับร้อยแน่นอน

“อ้าว เค้าไม่สนใจ แต่ผมสนใจนะครับ ตัวเลขบัตรเครดิต 16 หลัก ผิดไปหลักเดียวก็ถือว่าผิดนะ” โจ้ท้วง
ถ้าเป็นเลขบัตรเครดิต เลขกรรมธรรม์ หรือเลขประจำตัว เลขพวกนี้ในทางไปฏิบัติไม่ถูกนำไปคำนวณแน่นอน
(ถ้ามีการคำนวณมักตัดตัวเลข 4 หลักแรก, 4 หลักท้ายมาคำนวณ ซึ่งไม่ได้คำนวณทั้ง 16 หลัก)

ทางที่ดีปรับ Format Cells ของคอลัมน์นั้นให้เป็น Text ก่อน แล้วค่อยคีย์ข้อมูล

หรือจะใช้ Format Cells แบบ General ก็ได้ (ค่าดีฟอลต์) แต่เวลาคีย์ข้อมูล ให้ขึ้นต้นด้วยเครื่องหมาย ‘ (Single Quotation Mark)
การขึ้นต้นด้วยเครื่องหมาย ‘ (Single Quotation Mark) คือการบอกให้ Excel รู้ว่าข้อมูลนี้เป็น Text
เช่น คีย์ข้อมูลเป็น
‘4784489579420097

พอกดเอ็นเทอร์ ข้อมูลจะกลายเป็น Text

ตัวเลขมีกี่หลักก็ได้ตามนั้นหมด

“ถ้าเลือกเป็น Text มีข้อจำกัดไหมครับว่าได้ไม่เกินกี่ตัวอักษร” โจ้ถาม
32,767 อักขระ เกินพอแน่นอน” ผมยิ้ม

“ผมเคยได้ยินว่า Excel มีข้อจำกัดเรื่องตัวเลข แต่ไม่รู้ว่ามีผลแบบนี้ ขอบคุณพี่บิวมากนะครับ” โจ้โค้งขอบคุณ
“ปัญหานี้พี่ก็เคยเจอ ตอนเจอพี่ก็ตกใจเหมือนโจ้นั่นแหละ”
“ว่าแต่..”
โจ้เอ่ย
“แต่อะไร?”
“เรื่องออฟฟิศมีผีนี่เรื่องจริงนะครับ ก็ตอนนั้นปรินต์เตอร์ทำงานเองเฉยเลย เครื่องนี้เลยครับ” โจ้ชี้ไปที่ปรินต์เตอร์
“อ๋อ ปรินต์ตอนห้าทุ่มใช่มะ ตอนนั้นพี่ต่อ VPN จากบ้าน แล้วสั่งปรินต์งานเองแหละ”
“อ้าว เพ่!”
โจ้ร้องเสียงดัง

ถ้าคุณชอบบทความแนวนี้ สามารถอัพเดตบทความใหม่โดยคลิก Like เฟซบุ๊กเพจวิศวกรรีพอร์ต
อย่าลืมแชร์ให้เพื่อนอ่านเพื่อเป็นกำลังใจให้คนเขียนด้วยนะครับ ^_^

Reference:
https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3
https://support.microsoft.com/en-us/office/display-numbers-in-scientific-exponential-notation-f85a96c0-18a1-4249-81c3-e934cd2aae25
https://www.microsoft.com/en-us/microsoft-365/blog/2008/04/10/understanding-floating-point-precision-aka-why-does-excel-give-me-seemingly-wrong-answers/#:~:text=The%20number%20of%20digits%20of,be%20stored%20in%20binary%20format.

วิศวกรรีพอร์ต

คนธรรมดาผู้มีประสบการณ์ทำงานหลากหลายตำแหน่ง คลุกคลีกับการทำรีพอร์ตมาโดยตลอด สุดท้ายค้นพบแนวทางของตัวเอง จึงอยากแบ่งปันเคล็ดลับและประสบการณ์ให้กับผู้สนใจ

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.