[python]数字金额转换成大写金额

来源:互联网 发布:卓大王yeile知乎 编辑:程序博客网 时间:2024/04/30 23:26

最近开始负责单位的测绘合同草拟和签订,所以打算用python-docx来制作模板,减少自己的工作量。因为合同中有金额的大写内容,所以做了一个转换的函数。
因为行业内几乎签不了上亿的合同,所以函数只能转换到亿以下,如有需要可以自己增加上亿的部分。因为是自用写的非常粗糙,敬请斧正。

# coding=gbkimport mathdef convertNumToChinese(totalPrice):    dictChinese = [u'零',u'壹',u'贰',u'叁',u'肆',u'伍',u'陆',u'柒',u'捌',u'玖']    unitChinese = [u'',u'拾',u'佰',u'仟','',u'拾',u'佰',u'仟']    #将整数部分和小数部分区分开    partA = int(math.floor(totalPrice))    partB = round(totalPrice-partA, 2)    strPartA = str(partA)    strPartB = ''    if partB != 0:        strPartB = str(partB)[2:]    singleNum = []    if len(strPartA) != 0:        i = 0        while i < len(strPartA):            singleNum.append(strPartA[i])            i = i+1    #将整数部分先压再出,因为可以从后向前处理,好判断位数     tnumChinesePartA = []    numChinesePartA = []    j = 0    bef = '0';    if len(strPartA) != 0:        while j < len(strPartA) :            curr = singleNum.pop()            if curr == '0' and bef !='0':                tnumChinesePartA.append(dictChinese[0])                bef = curr            if curr != '0':                tnumChinesePartA.append(unitChinese[j])                tnumChinesePartA.append(dictChinese[int(curr)])                bef = curr            if j == 3:                tnumChinesePartA.append(u'萬')                bef = '0'            j = j+1        for i in range(len(tnumChinesePartA)):            numChinesePartA.append(tnumChinesePartA.pop())    A = ''          for i in numChinesePartA:        A = A+i    #小数部分很简单,只要判断下角是否为零    B = ''    if len(strPartB) == 1:        B = dictChinese[int(strPartB[0])] + u'角'    if len(strPartB) == 2 and strPartB[0] != '0':        B = dictChinese[int(strPartB[0])] + u'角' + dictChinese[int(strPartB[1])] + u'分'    if len(strPartB) == 2 and strPartB[0] == '0':        B = dictChinese[int(strPartB[0])] + dictChinese[int(strPartB[1])] + u'分'    if len(strPartB) == 0:        S = A + u'圆整'    if len(strPartB)!= 0:        S = A + u'圆' +B    return S    

主要的思路是将整数部分和小数部分分开处理,整数部分注意增加’萬’这个单位就可以,小数部分只要分三种情况就行。
因为使用在合同内,所以对书写规范要求不严格,如果有严格书写规范,请注意在萬位那里增加对前后是否同时存在零的判断。

原创粉丝点击