การแปลง ตารางเมตร เป็น ไร่/งาน/ตารางวา

Mn
Yeeraf Co., Ltd.
Published in
1 min readFeb 5, 2019

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

NOTE: ในที่นี้ผมจะเขียนด้วยภาษา PHP นะครับเนื่องด้วยระบบที่ทำขึ้นทำด้วย Laravel

TL;DR ไม่อยากอ่านเยอะ เจ็บตาก็เอา code ชุดนี้ไปประยุคต์ใช้ได้เลยครับ

ก่อนจะเริ่มเขียนฟังชั่งการแปลงหน่วย เราก็ต้องมาดูก่อนว่าแต่ละหน่วยจะมีการแปลงค่าอย่างไร

1600 ตารางเมตร = 1 ไร่

400 ตารางเมตร = 1 งาน

4 ตารางเมตร = 1 ตารางวา

เมื่อได้หลักการแปลงค่าแต่ละหน่วยแล้ว ผมจะทดสอบโดยการแปลง 3000 ตารางเมตร ให้อยู่ในรูปแบบของ ไร่/งาน/ตารางวา

จาก ตารางเมตรเป็นไร่

แนวคิดคือ พอเรารู้ว่า 1600 ตารางเมตร = 1 ไร่ หมายความว่าผมสามารถ เอา 3000/1600 ได้เลย โดยไม่สนว่าเศษที่เหลือคืออะไร ดังนั้นสูตรที่ผมจะได้คือ

$rai = (int) 3000/1600;

ผลรับที่ได้คือ 1 ไร่

จาก ตารางเมตรเป็นงาน

แนวคิดคือ ผมจะไม่สนว่าจะได้กี่ไร่ แต่จะสนว่าหลังจากที่แปลงเป็นไร่ แล้วเหลือพื้นที่อีกเท่าไหร่ แล้วนำเศษที่เหลือ (ตรงนี้คือการนำ Modulo มาใช้) มาหารด้วย 400 เพื่อจะได้พื้นที่ในหน่วนงาน โดยที่ไม่สนทศนิยมที่เหลือ ดังนั้นสูตรที่ผมใช้คือ

$ngan = (int) (($sqm % 1600) / 400);

ผลรับที่ได้คือ 3 งาน

จาก ตารางเมตรเป็นตารางวา

แนวคิดคือ อะไรก็ตามที่เหลือจากค่าข้างบนให้ หาร ด้วย 4 เลย

$sqWa = round((fmod($sqm, 400) / 4),2)

ผลรับที่ได้คือ 50 ตารางวา

เคสนี้ผมจะใช้ fmod เพื่อรองรับกรณีที่ค่าที่ได้มาเป็นทศนิยม

จะเห็นว่าผม mod ด้วย 400 เลย โดยไม่ได้นำนำหลักพื้นที่ไร่ออกก่อน เนื่องด้วย 400 ตารางเมตร * 4 จะได้ 1 ไร่พอดี ซึ่งหมายความว่า ผมสามารถทำการ mod 400 เพื่อหาเศษที่เหลือได้เลย

และผมต้องการแค่ทศนิยม 2 ตำแหน่ง เลยทำการ rounding ปิดท้าย

สรุปปิดท้ายผมจะได้

3000 ตารางเมตร => 1 ไร่ 3 งาน 50 ตารางวา

--

--