การ Rounding แบบต่างๆ ของโปรแกรม
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 504   1
URL.หัวข้อ / URL
การ Rounding แบบต่างๆ ของโปรแกรม

เรื่องนี้เป็นเรื่องสำคัญที่โปรแกรมเมอร์ควรใส่ใจ
ถ้าเกิดว่าเราต้องใช้การปัดเลขทศนิยม
ขอเอา article มาฝากกันนะครับ

algorithm ของการ rounding มีหลายวิธี แล้วโปรแกรม
(ทั้ง programming tools และ applications) ต่างๆ ก็เลือก
ใช้ algorithm ต่างๆ กันไป สิ่งที่เราต้องสนใจก็คง
เริ่มดูว่าวิธีที่ว่ามีอะไรบ้าง แล้วโปรแกรมที่เราไปเกี่ยวข้องด้วย
ใช้วิธีไหน แล้วถ้าเราเกิดอยากได้วิธีการ rounding แบบที่
โปรแกรมที่เราใช้ไม่มีให้จะทำอย่างไร.

Rounding algorithms
=======================
- Rounding Down
- Rounding Up
- Arithmetic Rounding
- Banker's Rounding (rounding แบบนายธนาคาร อันนี้เกี่ยวกับ Access ครับ)
- Random Rounding
- Alternative Rounding

ขอเน้นเฉพาะ Banker's rounding ก็แล้วกันครับ
คือถ้าโดยปกติเรามักจะต้องการให้ .5 ปัดขึ้น เช่น 2.45 ควรถูกปัดเป็น 2.5
แต่ banker คงไม่ชอบกระมัง ด้วยที่ว่า .5 มันอยู่ตรงกลาง
ถ้า .4 ปัดลง .6 ปัดขึ้น ก็ยังพอเข้าใจ แต่ .5 มันอยู่กึ่งกลาง
ดังนั้นถ้าปัดลงก็ไม่ถูก ปัดขึ้นก็ไม่ถูก

ไม่ถูกที่ว่านี้ก็คงประมาณว่า ถ้ามีการปัดเลขหลายจำนวน
ผลรวมของตัวเลขดังกล่าวก็จะ "บวม" หรือเพี้ยนไปมาก
อย่างนี้ banker ไม่ชอบครับ

วิธีการของ Banker's rounding ก็เลยใช้หลักว่า
ดูว่าเลขข้างหน้าเลข 5 ที่จะถูกปัดนั้นเป็นเลขคู่หรือคี่
ใช้หลักการเฉลี่ยไปว่า
ถ้าเป็นเลขคี่-->ปัดขึ้น
ถ้าเป็นเลขคู่-->ปัดลง

เปิด Access กดปุ่ม Ctrl+G แล้วทดลองพิมพ์ตามนี้
? round(1.15, 1)
1.2
? round(1.25, 1)
1.2


VBA ใช้ Banker's rounding algorithm ครับ
ส่วนโปรแกรมอื่นๆ ลองตรวจสอบดูนะครับ


อ่านเพิ่มเติมได้ที่
http://support.microsoft.com/default.aspx?scid=kb;en-us;196652
ซึ่งอธิบายละเอียด แล้วแจงว่าโปรแกรมค่าย Microsoft ใช้ algorithm ไหนกันบ้าง
ส่วนโปรแกรมภาษาอื่น ขอรบกวนเพื่อนที่ใช้โปรแกรม/ภาษาไหนอยู่
ช่วยตอบให้ได้ทราบกันด้วยนะครับ

1 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R06371
ขอบคุณ อ. สุเทพ มากครับ ที่แนะนำความรู้ดีๆ มาให้เพื่อนๆ ได้เรียนรู้กัน

ผมเองก็เจอปัญหากับ Round() ของหลายๆ Database ไม่ว่าจะเป็นกับ Access, Excel, Word, VB, SQL Server, Oracle, PostgreSQL, MySQL, AuthorWare อันเนื่องมาจาก algorithms ที่แต่ละโปรแกรมเลือกใช้นี่เอง

สำหรับท่านอื่นที่สนใจเกี่ยวกับสิ่งที่ผมเจอ Round() ของแต่ละโปรแกรม ให้ลองค้นด้วยคำว่า Round ดูครับ


@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.1006s