top of page
ค้นหา
รูปภาพนักเขียนSathit Jittanupat

"num2str", another JavaScript version of BAHTTEXT

อัปเดตเมื่อ 24 ก.ย. 2566



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


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


เหตุผลที่ต้องเขียนตัวเลขเป็นข้อความนั้น ผมสันนิษฐานว่าเพื่อป้องกันความผิดพลาดหรืออ่านตัวเลขไม่ออก ตัวอย่างที่เห็นได้ชัดคือ การเขียนสั่งจ่ายเช็ค ถ้าเลขจำนวนเงินไม่ตรงกับตัวหนังสือทางธนาคารก็อาจระงับการจ่ายเงิน และทำนองเดียวกันกับเอกสารสำคัญทางบัญชี เช่น ใบแจ้งหนี้และใบเสร็จรับเงินด้วย พอใช้คอมพิวเตอร์พิมพ์บิลความจำเป็นเรื่องนี้ก็ลดน้อยลง แต่โปรแกรมบัญชีทั้งหลายก็ยังคงธรรมเนียมปฏิบัตินี้ไว้ ตรงกันข้ามกับพวกที่ใช้บิลเขียนมือ มักเจอว่าไม่ยอมเขียนตัวหนังสือจำนวนเงิน


ที่จริงแล้วตัวหนังสือจำนวนเงินยังพอมีประโยชน์อยู่บ้าง กรณีที่บังเอิญตัวเลขที่พิมพ์ออกมานั้นไม่ชัดเจน หรือขาดหายไปพอดี เช่น บิลยับ กระดาษขาด หมึกพิมพ์จาง หัวเข็มพรินเตอร์หักทำให้ตัวเลขขาดแหว่ง


ไม่ว่าอย่างไรโค้ดแปลงตัวเลขเป็นข้อความภาษาไทย เป็นงานอีกชิ้นหนึ่งที่โปรแกรมเมอร์ไทยต้องเขียนใช้กันเอง


ข้อดีของโค้ดต่อไปนี้อยู่ที่แปลงได้ 2 ภาษา อังกฤษและไทย ใช้อัลกอริทึมเดียวกัน (ผมเอาต้นแบบมาจาก Stack Overflow ที่ใช้แปลงภาษาอังกฤษ) มาตัดต่อเพิ่มให้แปลงภาษาไทยได้ด้วย


สำหรับภาษาไทยต้องมีขั้นตอนตบท้าย (finalization) คำพิเศษบางคำ


เลขหนึ่งพอเอาไปจับคู่กับสิบต้องเรียกว่า "สิบเอ็ด" ไม่ใช่ "สิบหนึ่ง" เลขสองพอเป็นหลักสิบต้องอ่านว่า "ยี่สิบ" ไม่ใช่ "สองสิบ" ส่วนเลขหนึ่งพอเป็นหลักสิบตัดทิ้งไปเลยอ่านว่า "สิบ" เฉย ๆ ไม่ใช่ "หนึ่งสิบ"


ภาษาอังกฤษแปลงได้ "สิบพัน" (Ten Thousand) กับ "ร้อยพัน" (Hundred Thousand) ตบให้กลายเป็น "หมื่น"​ และ "แสน"



แนะนำ function สำคัญ


num2str.format ( NUMBER, LANG )

ใช้แปลงค่าตัวเลขจำนวนเต็ม

num2str.format(1234)
> "one thousand two hundred thirty four"

num2str.bahtText ( NUMBER, LANG)

ใช้แปลงค่าตัวเลขมีทศนิยม ใส่หน่วยเป็นบาท/สตางค์ให้อัตโนมัติ

num2str.bahtText(1234.56, 'th') 
"หนึ่งพันสองร้อยสามสิบสี่บาทห้าสิบหกสตางค์"

ที่แยกเป็น 2 ฟังก์ชั่นเช่นนี้ เพื่อให้สามารถ customize ผลลัพธ์ได้ตามสะดวก เช่น หากต้องการหน่วยเงินที่ไม่ใช่บาท สามารถใช้ format แปลงเฉพาะตัวเลข แล้วเอาหน่วยของเงินต่อท้ายเองได้ รวมทั้งหากเอาไปใช้กับการพิมพ์บนเช็ค บางครั้งเศษสตางค์จะไม่แปลงเป็นข้อความแต่ใช้เป็น xx/100 เช่น "สามร้อยยี่สิบบาท 50/100"


ค่าลบไม่ได้แปลงให้ สามารถเปลี่ยน "-" เป็นคำที่ต้องการ "ลดหนี้" หรือคำอื่นได้เอง


ความแตกต่างที่ไม่เหมือนกันที่เคยเจอมา สามารถปรับเปลี่ยนในโค้ดส่วนที่ config คำแปลได้ บางแห่งภาษาอังกฤษอยากให้มี “AND” คั่น เช่น “one thousand two hundred AND thirty four” เวอร์ชั่นแรกของผมเคยใช้ comma “,” คั่น เพื่อให้อ่านง่าย เช่น “one thousand two hundred, thirty four


"trillion" คือคำภาษาอังกฤษที่ผมไม่กล้าใช้แปล


โค้ดอยู่ใน gist สามารถเอาไปใช้ หรือดัดแปลงตามต้องการ



อ้างอิง




ดู 0 ครั้ง0 ความคิดเห็น

โพสต์ล่าสุด

ดูทั้งหมด

Comments


Post: Blog2_Post
bottom of page