栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

关于使用python简单将账本金额转化为大写中文数字

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于使用python简单将账本金额转化为大写中文数字

关于使用python简单将账本金额转化为大写中文数字

缘由

实习的地方要求将账本金额转换为中文大写,我又不想一个个手打,网上能直接找到的也只支持整数转换,就根据自己的需要写了一小段,置此以作记录

def get_sdigit(num, p):
    return int(num / pow(10, p)) % 10


def get_max_pos(number):
    return len(str(int(number))) + len(str(int(number))) % 4 + 1


class CNumber:
    cdict = {}
    gdict = {}
    xdict = {}

    def __init__(self):
        self.cdict = {0: u'', 1: u'拾', 2: u'佰', 3: u'仟'}
        self.xdict = {0: '分', 1: '角', 2: u'元', 3: u'万', 4: u'亿', 5: u'兆'}  # 数字标识符
        self.gdict = {0: u'零', 1: u'壹', 2: u'贰', 3: u'叁', 4: u'肆', 5: u'伍', 6: u'陆', 7: u'柒', 8: u'捌', 9: u'玖'}

    def tsf(self, number):
        cdata = []
        cdata.append(get_sdigit(number, -2))
        cdata.append(get_sdigit(number, -1))
        mark = 0
        for i in range(0, get_max_pos(number)):
            if mark == 0:
                temp = []
                temp.append(get_sdigit(number, i))
                mark += 1
            elif mark == 1:
                temp.append(get_sdigit(number, i))
                mark += 1
            elif mark == 2:
                temp.append(get_sdigit(number, i))
                mark += 1
            elif mark == 3:
                temp.append(get_sdigit(number, i))
                mark = 0
                cdata.append(temp)
        return self.to_String(cdata)

    def to_String(self, nList):
        S = ''  # 初始化用的S,防止小数部分为空
        # 下面两个if是用来加上小数部分的
        if nList[0] != 0:
            S = self.gdict.get(nList[0]) + self.xdict.get(0)
        if nList[1] != 0:
            S = self.gdict.get(nList[1]) + self.xdict.get(1) + S
        if nList[0] == 0 and nList[1] == 0:
            S = '整' + S

        for i in range(2, len(nList)):
            mark = 0
            for num in nList[i]:
                if num == 0:
                    mark += 1
            if mark != 4 or i == 2:
                S = self.xdict.get(i) + S  # 加上单位(元万亿。。。)
            for j in range(0, 4):
                if i != len(nList) - 1:
                    if nList[i][j] != 0:
                        S = self.gdict.get(nList[i][j]) + self.cdict.get(j) + S
                    # 逻辑判断,每四个单位哪些情况会出现零
                    # 基本逻辑为,同阶内,小于自己的一定存在非0,而自己的上一位一定非0
                    elif (j == 1 and nList[i][0] != 0 and nList[i][2] != 0) 
                            or (j == 2 and (nList[i][1] != 0 or nList[i][0] != 0) and nList[i][3] != 0)
                            or (j == 3 and (nList[i][2] != 0 or nList[i][1] != 0 or nList[i][0] != 0)):
                        S = self.gdict.get(nList[i][j]) + S
                else:
                    if nList[i][j] != 0:
                        S = self.gdict.get(nList[i][j]) + self.cdict.get(j) + S
                    elif j == 1 and nList[i][0] != 0 and nList[i][2] != 0:
                        S = self.gdict.get(nList[i][j]) + S
        return S

这里是简单测试用的

if __name__ == '__main__':
    test = CNumber()
    print(test.tsf(1100000000))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001997.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号