เมื่อวันก่อนมีคนมาโพสต์ถามใน LINE ว่า จะเขียนโค้ด PHP เพื่อแปลงค่าเงินเป็นตัวหนังสือให้สั้นๆ เหมือนโค้ด FoxPro ที่แปะให้ดูเป็นตัวอย่างได้ไหม
FUNCTION spell
PARAMETER Vn
Va = STRT(TRAN(Vn,'@R G9A9B9C9D9E9F9A9B9C9D9E9F9.9F9S'),' F0.','')
RETURN STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(;
STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(;
SUBS(Va,RAT(' ',Va)+2,35),'1','หนึ่ง'),'2','สอง'),'3','สาม'),'4','สี่'),;
'5','ห้า'),'6','หก'),'7','เจ็ด'),'8','แปด'),'9','เก้า'),'.0F0S','บาทถ้วน'),;
'0F',''),'0E',''),'0D',''),'0C',''),'0B',''),'0',''),'A','ล้าน'),;
'B','แสน'),'C','หมื่น'),'D','พัน'),'E','ร้อย'),'F','สิบ'),'.','บาท'),;
'หนึ่งสิบ','สิบ'),'สองสิบ','ยี่สิบ'),'สิบหนึ่ง','สิบเอ็ด'),'S','สตางค์')
รู้สึกว่าน่าสนใจดีเลยลองเขียนดู แน่นอนว่าออกมาไม่ใกล้เคียงกับคำว่าสั้น 😅 แต่ก็สนุกดีและใช้งานได้ เลยขอจดเก็บไว้หน่อย รูปแบบการทำงานของฟังก์ชันพยายามลอกของ Excel มา คือปัดทศนิยมเป็นสองตำแหน่ง รองรับค่าลบ ค่าศูนย์ และตัวเลขยาวๆ ได้ (เท่าที่ทดสอบด้วย PHPUnit คือที่ระดับ 1×1012 ยังโอเคอยู่) หน้าตาโค้ดก็ประมาณนี้
ตัวอย่างการใช้งานและผลลัพธ์ที่ได้ 😆