python 数字金额转化

import re


dict= {'1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍','6':'陆','7':'柒','8':'捌','9':'玖','0':'零'}


dict1= {'0':'','1':'拾','2':'佰','3':'仟','4':'万','5':'万拾','6':'万百','7':'万千','8':'亿',
        '9':'亿拾','10':'亿佰','11':'亿仟','12':'亿万'}
dict2={'0':'角','1':'分'}






def deepDone(word,begin):


    index=word.find('零',begin)


    #处理 零元  这种特殊情况
    if(word=='零元'):
        return word


    if(index==-1):


        return word
    else:
        if(word[index+1]=='元'):
            word=word[0:index]+word[index:].replace(word[index], '', 1)


            return word


        #处理 大数字 拾万  百万的情况
        if(word[index+3]=='零'):
            word=word[0:index]+word[index:].replace(word[index:index+3],'',1)


            word=deepDone(word,index)
            return word
        if(word[index+2]!='零'):            #壹佰零拾玖元
                                            #壹佰零玖元


            word=word[0:index]+word[index:].replace(word[index+1],'',1)


            word=deepDone(word,index+1)
        else:


            word=word[0:index]+word[index:].replace(word[index:index+2],'',1)
            #壹千壹百零拾零元


            word=deepDone(word,index)


    return word


'''
除去多余的万字


'''
def deepDone2(word,key):
    word=word[::-1]


    index=word.find(key)


    if (index==-1):
        return word[::-1]


    word=word[0:index+1]+word[index+1:].replace(key,'',3)


    return word[::-1]




def numtochn1(str_num):
    word='元'
    i=0
    for one in str_num[::-1]:
        num_dict=dict[one]         #数字大写
        word_dict=dict1[str(i)]     #单位大写
        word=word+word_dict+num_dict
        i+=1
    word=word[::-1]  #对word做进一步的调整
    word=deepDone(word,0) # 对word进下一步处理 ,0 为word 中的位置
    word=deepDone2(word,'万')  #对word进下一步处理,从后向前数,保留第一个 “万”字
    word=deepDone2(word,'亿')  #对word进下一步处理,从后向前数,保留第一个 “亿”字
    return  word


def numtochn2(str_num):
    i=0
    word=''
    for one in str_num:


        num_dict=dict[one]
        word_dict=dict2[str(i)]
        if (num_dict=='零'):
            word_dict=''
            if i==1:
                num_dict=''
        i+=1
        word=word+num_dict+word_dict
    return word


def numtochn(num):
    word=''
    arr=[]
    str_num=str(num)


    postion=str_num.find(".")
    if((postion)==-1):   #没有 .  的情况
        word=numtochn1(str_num)
        word='人民币'+word+'整'
    else:
        arr=str_num.split(".",1)


        word=numtochn1(arr[0])
        if(arr[1]=='00'):
            word='人民币'+word+'整'
        else:
            word2=numtochn2(arr[1])
            word='人民币'+word+word2
    return word


'''
对输入 进行一些处理:防止 异常的输入


形式应该是这样的: XXXX.XX


'''


def  MyInput():
    num=input("请输入您想转化的数字:\n")
    #pattern=re.compile(r'^(([0-9]+)|([0-9]+\.[0-9]{1,2}))$')
    pattern=re.compile(r'^[1-9]\d*(\.[0-9]{1,2})?$|^0(\.[0-9]{1,2})?$')
    # [1-9] 第一个数字为 1~9
    # \d *  然后 0~9 这些字符的 0个或者多个
    # (\.[0-9]{1,2})  小数点后面 一位 或者两位
    # ?  代表可选 或者不可选
    # |   或者
    # 匹配 0.01  0.98 这类的数字
    match=pattern.search(num)
    if match:
        print('result: ',num)
    else:
        print('重新输入你的数字形式应该是这样的: XXXX.XX:\n')
        return -1
    return num






if __name__=='__main__':
    #num=input("请输入您想转化的数字:\n")
    num=MyInput()
    while((num==-1)):
        num=MyInput()
    print('你输入的数字为:',num)
    word=numtochn(num)
    print(word)
### 回答1: 将字节串b'\xe6\x95\xb0\xe5\xad\x97\xe9\x87\x91\xe9\xa2\x9d\xe8\xbd\xac\xe6\x8d\xa2\xe4\xb8\xba\xe4\xb8\xad\xe6\x96\x87\xe5\xa4\xa7\xe5\x86\x99\xe9\x87\x91\xe9\xa2\x9dpython'转换为中文大写金額Python。 ### 回答2: 数字金额转换为中文大写金额是一个常见的问题,在很多场合都需要将数字金额转换成中文大写金额,比如财务报表、票据、合同等。在Python语言中,可以通过编写函数来实现数字金额转换为中文大写金额。 首先,需要将数字金额按位拆开,每四位作为一个单位进行处理。例如,对于1000000.01元,可以拆成1000和0.01两部分。 然后,需要将每个四位数转换为中文大写金额,这可以通过一个字典来实现,字典中包含了0到9的数字和对应的中文大写金额。 接着,需要按照亿、万、千、百、十等单位进行转换,并在必要的时候添加“零”、‘’亿‘’、‘’万‘’等中文词汇。 最后,将结果输出,即可将数字金额转换为中文大写金额。 下面是一个示例代码,实现了将数字金额转换为中文大写金额功能: ```python # 定义一个字典,包含0到9的数字和对应的中文大写金额 chinese_dict = {0: '零', 1: '壹', 2: '贰', 3: '叁', 4: '肆', 5: '伍', 6: '陆', 7: '柒', 8: '捌', 9: '玖'} def num_to_chinese(num): # 将数字转换为字符串 num_str = str(num) # 拆分整数和小数部分 num_parts = num_str.split('.') int_part = num_parts[0] # 将整数部分按位拆分为四位数 int_parts = [] while int_part: int_parts.insert(0, int(int_part[-4:])) int_part = int_part[:-4] # 定义亿、万、千、百、十等单位对应的中文词汇 units = ['', '拾', '佰', '仟'] big_units = ['', '万', '亿'] # 定义结果字符串 res = '' # 处理整数部分 for i, part in enumerate(int_parts): part_str = str(part) digit_len = len(part_str) # 处理四位数 for j, digit in enumerate(part_str): index = int(digit) if index != 0: res += chinese_dict[index] + units[digit_len-j-1] # 添加亿、万等中文词汇 if part != 0: res += big_units[len(int_parts)-i-1] # 如果有小数部分,添加“点”和小数部分的中文大写金额 if len(num_parts) == 2 and num_parts[1]: res += '点' for digit in num_parts[1]: res += chinese_dict[int(digit)] # 如果转换结果以“零”结尾,则删除结尾的“零” if res.endswith('零'): res = res[:-1] return res + '元' ``` 运行代码: ```python print(num_to_chinese(1000000.01)) # 一百万元零壹分 print(num_to_chinese(123456789.12)) # 一亿二千三百四十五万元六千七百八十九元壹角贰分 ``` 以上就是将数字金额转换为中文大写金额Python实现方式,通过这种方式可以方便地将数字金额转换成中文大写金额,方便应用于财务系统、票据打印、合同纸质版等场合。 ### 回答3: 在 Python 中将数字金额转换为中文大写金额可以通过以下的步骤来实现: 1. 首先定义一个字典,将每个数字和它对应的中文字符建立映射,如下所示: ```python chinese_num = { '0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖' } ``` 2. 将输入的数字转换为字符串,并倒序排列(方便处理每个数字的位数),并将小数点前后分开: ```python num_str = str(num) num_str_reverse = num_str[::-1] ints, decimals = num_str_reverse.split('.') ``` 3. 接下来可以定义一个列表来存储结果,以及一个变量来记录当前处理的数字位数: ```python result_list = [] current_pos = 0 ``` 4. 接下来进入循环,在每一次循环中,我们可以首先计算出当前处理的数字位数,如个位、十位、百位等,然后使用前面定义的字典来获得这个数字的中文描述,同时也会需要根据位数加上对应的单位,如元、万、亿等。代码示例如下: ```python for digit in ints: chinese_digit = chinese_num[digit] pos = current_pos % 4 + 1 if digit != '0': result_list.append(chinese_digit) result_list.append(units[pos - 1]) elif pos == 1 and len(result_list) > 0 and result_list[-1] != units[0]: # 处理“零”和单位的情况 result_list.append(chinese_digit) current_pos += 1 ``` 5. 循环结束后,我们需要判断结果列表的最后一个元素是否为单位'元',如果不是,我们需要手动添加一个'元': ```python if result_list[-1] != units[0]: result_list.append(units[0]) ``` 6. 最后加上小数部分的处理即可: ```python if decimals != '00': result_list.append('点') for digit in decimals: result_list.append(chinese_num[digit]) ``` 完整代码示例如下: ```python def chinese_conversion(num): chinese_num = { '0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖' } units = ['', '拾', '佰', '千', '万', '亿'] num_str = str(num) num_str_reverse = num_str[::-1] ints, decimals = num_str_reverse.split('.') result_list = [] current_pos = 0 for digit in ints: chinese_digit = chinese_num[digit] pos = current_pos % 4 + 1 if digit != '0': result_list.append(chinese_digit) result_list.append(units[pos - 1]) elif pos == 1 and len(result_list) > 0 and result_list[-1] != units[0]: result_list.append(chinese_digit) current_pos += 1 if result_list[-1] != units[0]: result_list.append(units[0]) if decimals != '00': result_list.append('点') for digit in decimals: result_list.append(chinese_num[digit]) return ''.join(result_list[::-1]) ``` 可以通过以下方式调用函数并输出结果: ```python num = 12345678.9 print(chinese_conversion(num)) #输出:壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元玖角 ``` 结果如预期,将数字金额转换为中文大写金额的功能实现成功。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值