Python之美元大写转换器

2018-10-11  本文已影响302人  Leo_23

Python之美元大写转换器

网上找了好久没找到python版本的,照着js抄了一下。

原文链接美元大写转换器

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = "leo"
__time__ = "2018-10-11"

'''
http://www.52ij.com/zhuanhuanqi/meiyuandaxie/shuzi.js
改编
'''

import math

arr1 = ("", " thousand", " million", " billion")
arr2 = ("zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety")
arr3 = ("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
arr4 = ("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen")


def English(a):
    strRet = ""
    if (len(a) == 3 and a[0:3] != "000"):
        if a[0:1] != "0":
            strRet = strRet + arr3[int(a[0:1])] + " hundred"
            if a[1:2] != "00":
                strRet = strRet + " and "
        a = a[1:]
    if len(a) == 2:
        if a[0:1] == "0":
            a = a[1:]
        elif a[0:1] == "1":
            strRet = strRet + arr4[int(a[1:2])]
        else:
            strRet = strRet + arr2[int(a[0:1])]
            if a[1:1] != "0":
                strRet = strRet + "-"
            a = a[1:]
    if (len(a) == 1 and a[0:1] != "0"):
        strRet = strRet + arr3[int(a[0:1])]
    return strRet


def doToEn(a):
    b = len(a)
    f, h = 0, 0
    g = ""
    e = math.ceil(b / 3)
    k = b - e * 3
    g = ""

    for f in range(k, b, 3):
        h += 1
        if f >= 0:
            num3 = a[f:f + 3]
        else:
            num3 = a[0:k + 3]
        strEng = English(num3)
        if strEng != "":
            if g != "":
                g += ","
            g += English(num3) + arr1[e - h]

    return "U.S. DOLLARS " + g.upper() + " ONLY"


def doToEnWuxiaoshudian(a):
    b = len(a)
    f, h = 0, 0
    g = ""
    e = math.ceil(b / 3)
    k = b - e * 3
    g = ""

    for f in range(k, b, 3):
        h += 1
        if f >= 0:
            num3 = a[f:f + 3]
        else:
            num3 = a[0:k + 3]
        strEng = English(num3)
        if strEng != "":
            if g != "":
                g = g + ","
            g = g + English(num3) + arr1[e - h]

    return "U.S. DOLLARS " + g.upper()


def doToEnYouxiaoshudian(a):
    b = len(a)
    f, h = 0, 0
    g = ""
    e = math.ceil(b / 3)
    k = b - e * 3
    g = ""

    for f in range(k, b, 3):
        h += 1
        if f >= 0:
            num3 = a[f:f + 3]
        else:
            num3 = a[0:k + 3]
        strEng = English(num3)
        if strEng != "":
            if g != "":
                g = g + ","
            g = g + English(num3) + arr1[e - h]

    return "CENTS " + g.upper() + " ONLY"


if __name__ == '__main__':
    number = '1234.56'
    if str.find(number, '.') != -1:
        # 有小数点
        aaaaa = number.split(".")[0]
        bbbbb = number.split(".")[1]
        ccccc = doToEnWuxiaoshudian(aaaaa)
        ddddd = ""
        if len(bbbbb) > 2:
            print("请精确到小数点后两位!如:6324.38")
        else:
            ddddd = doToEnYouxiaoshudian(bbbbb)
        result = ccccc + " AND " + ddddd

    else:
        result = doToEn(number)

    print(result)

上一篇 下一篇

猜你喜欢

热点阅读