Warning: session_start(): open(/tmp/sess_1bds26oi4r07eal7r7fkep0ud4, O_RDWR) failed: No space left on device (28) in /disk2/guru/public_html/qa-include/app/users.php on line 146
อยากเขียน function ในภาษา C# ที่แปลงตัวเลขให้กลายเป็นตัวอักษรคำอ่านในภาษาไทยครับ - CITEC-Guru ถามปัญหาคอม เขียนโปรแกรม
พึ่งเคยใช้งานครั้งแรกโปรดอ่านที่นี่! howtouse!
x
  • Register
หางานด้าน IT อยู่เหรอ?

อยากเขียน function ในภาษา C# ที่แปลงตัวเลขให้กลายเป็นตัวอักษรคำอ่านในภาษาไทยครับ

+2 votes
เช่น

function(1251) จะรีเทิร์น "หนึ่งพันสองร้อยห้าสิบเอ็ด"

function(1251.12) จะรีเทิร์น "หนึ่งพันสองร้อยห้าสิบเอ็ดจุดหนึ่งสอง"

จะเขียนเป็นโปรแกรมอย่างไรดีครับ
ถามเมื่อ May 21, 2012 in C# โดย HuaNaa (455 คะแนน)
   

2 Answers

+1 vote
แยกส่วนที่เป็นทศนิยม (หารด้วย 1 แล้วเอาเศษ) กับ จำนวนเต็ม ก่อนครับ
แต่ละส่วน วนลูปหารด้วย 10 เอาเศษใส่ stack ของแต่ละส่วนเก็บไว้
แล้ว pop ออกมา แล้วเอาขนาดของ stack ที่เหลือไป map ว่าหลักที่ pop เลขออกมาเป็น หลัก หน่วย สิบ ร้อย (ถ้าเป็นส่วนของจำนวนเต็ม)
ส่วนเลขก็ map กับคำเลย โดย
ถ้าเลข 1 เป็นหลักหน่วย แล้วมีจำนวนหลักมากกว่า 1 ก็ให้ใช้คำว่า เอ็ด แทน หนึ่ง
เลข 2 ถ้าเป็นหลักสิบ แล้วมีจำนวนหลักมากกว่า 2 ก็ให้ใช้คำว่า ยี่ แทน สอง
ตอบเมื่อ May 21, 2012 โดย Krurkrit Phoosakul (1,174 คะแนน)
+1 vote

 

public static string numConvertChar(string txt)
{
            string bahtTxt, n, bahtTH = "";
            double amount;
            try { amount = Convert.ToDouble(txt); }
            catch { amount = 0; }
            bahtTxt = amount.ToString("####.00");
            string[] num = {"ศูนย์", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า", "สิบ"};
            string[] rank = { "", "สิบ", "ร้อย", "พัน", "หมื่น", "แสน", "ล้าน" };
            string[] temp = bahtTxt.Split('.');
            string intVal = temp[0];
            string decVal = temp[1];
            if (Convert.ToDouble(bahtTxt) == 0)
                bahtTH = "ศูนย์บาทถ้วน";
            else
            {   
                for (int i = 0; i < intVal.Length; i++)
                {
                    n = intVal.Substring(i, 1);
                    if (n != "0")
                    {
                        if ((i == (intVal.Length - 1)) && (n == "1"))
                            bahtTH += "เอ็ด";
                        else if ((i == (intVal.Length - 2)) && (n == "2"))
                            bahtTH += "ยี่";
                        else if ((i == (intVal.Length - 2)) && (n == "1"))
                            bahtTH += "";
                        else
                            bahtTH += num[Convert.ToInt32(n)];
                        bahtTH += rank[(intVal.Length - i) - 1];
                    }
                }
                bahtTH += "บาท";
                if (decVal == "00")
                    bahtTH += "ถ้วน";
                else
                {
                    for (int i = 0; i < decVal.Length; i++)
                    {
                        n = decVal.Substring(i, 1);
                        if (n != "0")
                        {
                            if ((i == decVal.Length - 1) && (n == "1"))
                                bahtTH += "เอ็ด";
                            else if ((i == (decVal.Length - 2)) && (n == "2"))
                                bahtTH += "ยี่";
                            else if ((i == (decVal.Length - 2)) && (n == "1"))
                                bahtTH += "";
                            else
                                bahtTH += num[Convert.ToInt32(n)];
                            bahtTH += rank[(decVal.Length - i) - 1];
                        }
                    }
                    bahtTH += "สตางค์";
                }
            }
            return bahtTH;
}
 
จัดไปครับ ศึกษาเอาน่ะครับ
ตอบเมื่อ May 26, 2012 โดย Farkham Break-love (242 คะแนน)

Related questions

+1 vote
3 คำตอบ
0 votes
0 คำตอบ
389 views ถามเมื่อ Dec 9, 2015 in C# โดย Jidrid (102 คะแนน)
...