Truncate, Floor, Ceiling และ Round

ฟังก์ชันหลักสำหรับการแปลงค่าจากเลขจำนวนจริง (floating-point) ไปยังจำนวนเติม (integer) ที่มีอยู่ในเกือบทุกภาษาคือ Trancate (trunc), Floor, Ceiling (ceil) แล้วก็ Round ครับ ซึ่งบางทีดูเผินๆแล้วอาจเกิดความสับสนได้ว่ามันต่างกันตรงไหน ซึ่งการจะเลือกใช้ให้ถูกนั้นเราจำเป็นที่จะต้องเข้าใจถึงนิยามของแต่ละตัวซะก่อน

Truncate - คือการตัดเศษทิ้งครับ พูดง่ายๆคืออะไรที่อยู่หลังจุดเอามันออกให้หมด อย่าง trunc(4.67) ก็จะได้ค่า 4 โดยไม่สนว่าเลขหลังจุดจะมีค่าเท่าไหร่

Floor - คือการปัดลง หรือก็คือเลขจำนวนเต็มที่มากที่สุด ที่น้อยกว่าหรือเท่ากับค่าเดิมของมัน เช่น floor(5.6) = 5 หรือ floor(5.4) =5 เราไม่สนใจเลขหลังจุดเช่นกัน แต่เราจะพยายามหาจำนวนเต็มที่มาค่ามากที่สุดมาแทน

Ceiling - จะตรงข้ามกับ floor คือเลขจำนวนเต็มที่น้อยที่สุด ที่มากกว่าหรือเท่ากับค่าเดิมของมัน เช่น ceil(5.6) = 6 หรือ ceil(5.4) = 6 เช่นกันครับ เราไม่สนใจเลขหลังจุด

Round - เป็นฟังก์ชันเดียวที่ดูค่าของตัวส่วน ซึ่งจะถูกปัดให้เป็นเลขจำนวนเต็มมีค่าใกล้เคียงกับค่าเดิมมากที่สุด เช่น round(5.6) = 6 หรือ round(5.4) = 5

นี่คือนิยามโดยทั่วไปที่ดูไม่ยากเท่าไหร่ แต่ว่าสิ่งที่ทำให้สับสนและผิดกันประจำอย่างแรกคือ เราลืมเรื่องเลขติดลบไป เช่น trunc กับ floor ดูแล้วน่าจะได้ค่าเท่ากันตลอด แต่จริงๆแล้ว ค่าอย่าง -3.4 เมื่อผ่านฟังก์ชัน trunc จะถูกตัดเศษให้เป็น -3 แต่ฟังก์ชัน floor จะหาจำนวนเต็มที่มีค่าน้อยสุดที่ยังน้อยกว่าค่าเดิมอยู่ ซึ่งมันคือ -4 (ไม่ใช่ -3) เช่นกันครับ  ceil(-4.5) ก็ไม่ใช่ -5 แต่เป็น -4 ต่างหาก เพราะ -4 มีค่ามากกว่า -5

มีฟังก์ชัน round เพียงตัวเดียวที่ดูจะขัดกับสามัญสำนึกน้อยที่สุด เพราะเป็นการหาตัวใกล้เคียงอย่างที่เราเข้าใจ เช่น round(6.7) = 7 , round(-6.7) = -7, round(6.2) = 6 และ round(-6.2) = -6

อย่าลืมนะครับ ในการแปลงจากจำนวนจริงเป็นจำนวนเต็ม จะต้องเลือกใช้ฟังก์ชันให้ถูก (ส่วนใหญ่คนไทย จะเข้าใจฟังก์ชันนี้ด้วยคำๆเดียวคือ "ปัดเศษ" แต่จริงๆแล้วมันมีอะไรที่มากกว่านั้น) โดยเฉพาะอย่างยิ่งเมื่อเราทำงานกับค่าที่มีค่าติดลบด้วยแล้วยิ่งต้องระวังเป็นพิเศษ 

สุดท้ายนี้มีตารางตัวอย่าง ของค่าที่ได้จากฟังก์ชันต่างๆเป็นการสรุปให้ดูอีกครั้งครับ

  Truncate Floor Ceiling Round
3.0 3 3 3 3
3.3 3 3 4 3
3.5 3 3 4 4
3.6 3 3 4 4
-3.0 -3 -3 -3 -3
-3.3 -3 -4 -3 -3
-3.5 -3 -4 -3 -4
-3.6 -3 -4 -3 -4

Taxonomy upgrade extras: