ร้อยละ ทศนิยม 2 ตำแหน่งบวกคืน ไม่เท่ากับ 100 และ ปัญหาการคำนวณเลขทศนิยม เมื่อปัดเศษแล้วค่าที่บวกคืนไม่เท่าเดิม
กรณีนี้เป็นการทดสอบคำนวณเลขที่ต้องหารครึ่ง
ตัวอย่างเช่น 2.33 / 2 = 1.165 กรณีนี้ถ้าเก็บค่านี้ในฐานข้อมูลที่กำหนดให้มีทศนิยมเพียง 2 หลัก
ในฟิลด์ 2 ฟิลด์ซึ่งแต่ละฟิลด์จะถูกปัดขึ้นเป็น 1.7 เมื่อนำมาบวกกลับ 1.17 + 1.17 = 2.34
ถ้าอย่างนั้นเราก็ต้องกำหนดให้ฟิลด์ที่ใช้เก็บข้อมูลสามารถเก็บเลขทศนิยมได้หลายๆตัว ก็จะเก็บเลขทั้งสามหลักไว้ในฐานข้อมูลเลย 1.165 + 1.165 จะได้ 2.33 พอดี
แต่ตอนเราแสดงรายงาน ก็จำเป็นจะต้องแสดงเลขทศนิยมเพียงแค่ 2 หลักอยู่ดี แล้วเราจะทำอย่างไรล่ะทีนี้ ก็เก็บมันเป็นเลขทศนิยมเต็มจำนวนซะแล้วตอนแสดงก็ต้องปัดเศษอยู่ดี
เพราะค่า 1.165 ถ้าใช้ฟังก์ชั่นปัดเศษลง ก็จะเหลือ 1.16 แต่ถ้าปัดขึ้นก็จะเป็น 1.17 ซึ่งตัวเลขทั้งสองตัว เมื่อนำมารวมกัน ยังไงๆ ก็ไม่เท่ากับ 2.33 อยู่ดี (1.16+1.16 = 2.32, 1.17+1.17 = 2.34)
อีกตัวอย่างนึงครับเป็นการถอด VAT ราคาสินค้า
การคิดค่าทศนิยม แล้วผลรวมเพี้ยน เนื่องจากการปัดเศษ แล้วยอดเกินบ้าง ขาดบ้าง
ดังนั้น เราจะต้องหาวิธีในการคำนวณ และแสดงผลตัวเลขให้ถูกต้องให้ได้
ในตัวอย่างที่สองนั้นเท่าที่ลองทดสอบดู เวลาถอดทศนิยม
เฉพาะบางค่า ลองไล่ตั้งแต่ 1.01 ไปจนถึง 999.99 จะพบค่าที่เพี้ยนอยู่ประมาณ 874 ครั้ง
แสดงว่ามีค่า xxx.50 ประมาณ 874 ตัวที่ทศนิยม
สำหรับกรณีอื่นๆ ยังไม่พบในการใช้งานจริง
อย่างตัวอย่างการหาร 2 เป็นเพียงเลขสมมติ เพื่อจะแสดงให้เห็นว่าคำนวณเพี้ยนอย่างไร
แต่ไม่รู้ว่าชีวิตจริง ได้ใช้วิธีหารแบบใดบ้าง ใครที่มีกรณีไหนที่น่าสนใจ โพสต์บอกกันบ้างก็ดีนะครับ
จะได้ช่วยป้องกันข้อผิดพลาดในการเขียนโปรแกรม ที่โอกาสมองเห็นข้อผิดพลาดเป็นไปได้น้อยมากๆ
สำหรับการแก้ไขปัญหาที่เกิดขึ้นนั้น จำเป็นที่จะต้องแก้มือเป็นครั้งๆ ไป โดยให้ยูสเซอร์แก้ไขได้เอง สำหรับวิธีคำนวณที่จะไม่ให้เกิดข้อผิดพลาดนั้น ยังหาไม่ได้ครับ ไว้โอกาสหน้าจะลองหาวิธีทดสอบดูก่อน แล้วจะมาเล่าให้ฟังกันนะครับ
แก้ไขเมื่อ 6/10/2561
จากกระทู้ https://www.thaicreate.com/php/forum/132239.html เรื่องการหาร้อยละ
จากภาพจะเห็นได้ว่า ไม่ว่าจะปัดทศนิยมด้วยหลักการเลขคู่ หรือเลขคี่ ข้อมูลชุดที่สอง ด้านล่างจะได้ 99.99 เสมอ เนื่องจากเมื่อปัดทศนิยมเหลือ 2 หลัก ส่วนที่เหลือจะถูกตัดทิ้งหมด เพราะไม่เข้ากับเงื่อนไข ในการปัดขึ้น
จึงสรุปได้ว่า สำหรับกรณี ร้อยละ จะต้องตรวจสอบผลรวมของเปอร์เซ็นต์ เพราะปัดให้กับจำนวนที่มีทศนิยมสูงที่สุด ที่ยังไม่ได้ปัดขึ้น (เลขหลัก 2 ยังเหมือนเดิม) ก่อนจะนำไปแสดงผล
แก้ไขเมื่อ 2557/06/09
----------------------------------
Pariwat Tiprutee
----------------------------------
ในการคำนวณ VAT หากทศนิยมตำแหน่งที่ 3 มีค่ามากกว่า 5 ให้ปัดขึ้น แต่ถ้ามีค่าน้อยกว่าหรือเท่ากับ 5 ให้ปัดทิ้งไปครับ
ตัวอย่างการถอด VAT
ซื้อของมา 573.50 บาท
ถอด VAT ออกมาได้ (573.50*7) / 100 = 40.145 ปัดเศษทิ้ง = 40.14
ราคาสินค้า จะได้เป็น 573.50 - 40.14 = 533.36
คราวนี้นำ VAT มาบวกกลับเข้าไปในสินค้า จะได้ 533.36 + 40.14 = 573.50 พอดีครับ
-----------------------------------------------
แก้ไขครั้งที่ 2 เมื่อ 2558/04/13
-----------------------------------------------
เนื่องจากตัวอย่างการถอด VAT ใช้สูตรผิดจึงขอขีดทับไปก่อน ยังหาตัวอย่างไม่ได้
ถอด VAT = ราคา * 7 / 100
บวก VAT = ราคา * 7 / 107
ทดสอบดูแล้ว ไม่มีค่าใดผิดพลาดครับ ปัดเศษได้ปกติข้อมูลตามนี้ครับ
http://goo.gl/kHV8ub
แต่เคยมีกรณีที่แยกข้อมูลแล้วบวกกลับข้อมูลไม่ตรง แต่จำไม่ได้ครับ
ใครพอจะเจอกรณีเหมือนกับการหารครึ่งรบกวนแนะนำทีนะครับ
2.33 / 2 = 1.165
1.17 + 1.17 = 2.34
--------------------------------------------
ติดตามเรื่องราวการเขียนโปรแกรม PHP ได้ที่
https://www.youtube.com/user/PHPcodingAndDesign/channels
เตรียมตัวก่อนเขียน PHP 5.5
https://www.youtube.com/playlist?list=PLEFxdFJkMLu78rEFPPzkpeieOGEJp730g
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ความคิดเห็น
แสดงความคิดเห็น