ขอคำแนะนำเรื่องแปลงตัวเลข

ผมใช้งาน pygtk บน Ubuntu ขอคำแนะนำสัก 2 เรื่องครับ

1. ในกรณีที่เราต้องการให้แสดงค่าตัวเลข 123500.00 เป็น 123,500.00
เราต้องทำอย่างไรครับ ผมอ่านใน google พบว่าต้องใช้ locale ซึ่งพอทำได้บ้าง
แต่อยากรู้ว่ามีวิธีอื่นๆ อีกบ้างมั้ยครับ ซึ่งอาจจะง่ายกว่า

2.ผมขอคำแนะนำเรื่องการแปลงตัวเลขเป็นตัวอักษร คือ หากต้องการ
แปลงตัวเลข 123,500.50 เป็น หนึ่งแสนสองหมื่นสามพันห้าร้อยบาทห้าสิบสตางค์
หรือ เป็นอักษรภาษาอังกฤษ นั้น เราต้องเขียนขึ้นมาเอง หรือ มีใช้ใน python อยู่แล้วครับ
ผมหาวิธีใน google แล้วไม่พบครับ

ขอบคุณครับ

sugree's picture
  1. ใช้ locale ดูจะดีที่สุด ไม่อย่างนั้นก็ตัดต่อใส่ comma เอง
  2. เขียนเองครับ ลองเขียนดู ไม่ยากเกินไป

ขอบคุณครับ คงต้องลองเขียนเองครับ

def self.commas(x) str = x.to_s.reverse str.gsub!(/([0-9]{3})/,”\1,”) str.gsub(/,$/,”“).reverse end

ถ้าแปลงตัวเลขเป็นตัวอักษร def self.num_to_text(num)

ntt=num.to_s ttn=” c=0 j=’0123456789’

while c<=(ntt.length-1) if ntt[c]==j[1]#เลข 1 if c==(ntt.length-1)&& ntt.length>1 one=’เอ็ด’ else one=’หนึ่ง’ end ttn=ttn+one end

                            if ntt[c]==j[2]#เลข 2
                                if c==(ntt.length-2)&& ntt.length>1
                                  two='ยี่'
                                else
                                  two='สอง'
                                end
                                ttn=ttn+two
                             end

                            if ntt[c]==j[3]
                                ttn=ttn+'สาม'
                            end
                            if ntt[c]==j[4]
                                ttn=ttn+'สี่'
                            end
                            if ntt[c]==j[5]
                                ttn=ttn+'ห้า'
                            end
                            if ntt[c]==j[6]
                                ttn=ttn+'หก'
                            end
                            if ntt[c]==j[7]
                                ttn=ttn+'เจ็ด'
                            end
                            if ntt[c]==j[8]
                                ttn=ttn+'แปด'
                            end
                            if ntt[c]==j[9]
                                ttn=ttn+'เก้า'
                            end

                            if ntt.length-c-1==6 || ntt.length-c-1==12 || ntt.length-c-1==18 
                                ttn=ttn+'ล้าน'
                            end
                            if ntt[c]!=j[0]
                            if ntt.length-c-1==5 || ntt.length-c-1==11 || ntt.length-c-1==17
                                ttn=ttn+'แสน'
                            end
                            if ntt.length-c-1==4 || ntt.length-c-1==10 || ntt.length-c-1==16
                                ttn=ttn+'หมื่น'
                            end
                            if ntt.length-c-1==3 || ntt.length-c-1==9 || ntt.length-c-1==15
                                ttn=ttn+'พัน'
                            end
                            if ntt.length-c-1==2 || ntt.length-c-1==8 || ntt.length-c-1==14
                                ttn=ttn+'ร้อย'
                            end
                            if ntt.length-c-1==1 || ntt.length-c-1==7 || ntt.length-c-1==13
                                ttn=ttn+'สิบ'
                            end
                            end

c=c+1 end

return ttn end

ผมเขียนเองนะครับทำแบบง่ายๆ ถ้ามีแนวที่ดีกว่านี้แนะนำด้วยนะครับ

ผมใช้อันนี้ครับ(ตัดจากใน IRC bot มาตรงๆครับ แก้ไขนิดหน่อย)

def readnum(num, exact=True):
    num=int(num)
    if num < 10:
        if num == 9:
            return "เก้า"
        elif num == 8:
            return "แปด"
        elif num == 7:
            return "เจ็ด"
        elif num == 6:
            return "หก"
        elif num == 5:
            return "ห้า"
        elif num == 4:
            return "สี่"
        elif num == 3:
            return "สาม"
        elif num == 2:
            return "สอง"
        elif num == 1 and exact:
            return "หนึ่ง"
        elif num == 1 and not exact:
            return "เอ็ด"
        else:
            return "ศูนย์"
    else:
        if num < 20 and num >= 10:
            return "สิบ%s"%(readnum(num-10, False).replace("ศูนย์", ""))
        import math
        if num < 100:
            minus = int(math.floor(num/10)*10)
            return "%sสิบ%s"%(readnum(minus/10).replace("ศูนย์", "").replace("สอง", "ยี่"), readnum(num-minus, False).replace("ศูนย์", ""))
        elif num < 1000:
            minus = int(math.floor(num/100)*100)
            return "%sร้อย%s"%(readnum(minus/100), readnum(num-minus, False).replace("ศูนย์", ""))
        elif num < 10000:
            minus = int(math.floor(num/1000)*1000)
            return "%sพัน%s"%(readnum(minus/1000), readnum(num-minus, False).replace("ศูนย์", ""))
        elif num < 100000:
            minus = int(math.floor(num/10000)*10000)
            return "%sหมื่น%s"%(readnum(minus/10000), readnum(num-minus, False).replace("ศูนย์", ""))
        elif num < 1000000:
            minus = int(math.floor(num/100000)*100000)
            return "%sแสน%s"%(readnum(minus/100000), readnum(num-minus, False).replace("ศูนย์", ""))
        else:
            minus = int(math.floor(num/1000000)*1000000)
            return "%sล้าน%s"%(self.readnum(minus/1000000), self.readnum(num-minus, False).replace("ศูนย์", ""))

เวลาใช้ก็ readnum(เลข) ครับ ส่วน exact นั้นไว้ระบุว่าเป็นเลขนั้นเป๊ะๆรึเปล่า(ใช้ภายในครับเวลาทำ เอ็ด)

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น