Python将数字转换为人民币读法的字符串

初学Python,做了一个练习题,将一个数转换成人民币读法的字符串

#大写汉字
han_list = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"]
#单位
fraction_unit_list = ["角","分"]
four_unit_list = ["千","百","拾",""]
unit_list = ["元","万","亿","万"]
#分离整数和小数
def separate_integer_decimal(num):
    integer = int(num)
    fraction = round((num - integer) * 100)
    return [integer,fraction]
#整数数字转汉字
def four_to_hanstr(num):
    num = str(num)
    if len(num) == 0:
        return ""
    elif len(num) == 1:
        num = "000" + num
    elif len(num) == 2:
        num = "00" + num
    elif len(num) == 3:
        num = "0" + num
    list1 = ["","","",""]
    count_0 = 0
    for i in range(len(num)):
        number = int(num[i])
        if number == 0:
            count_0 += 1
        else:
            list1[i] = han_list[number] + four_unit_list[i]
    if count_0 == 3 or count_0 == 0:
        return list1[0] + list1[1] + list1[2] + list1[3]
    elif count_0 == 1:
        if list1[1] == '':
            return list1[0] + han_list[0] + list1[2] + list1[3]
        elif list1[2] == '':
            return list1[0] + list1[1] + han_list[0] + list1[3]
        else:
            return list1[0] + list1[1] + list1[2] + list1[3]
    elif count_0 == 2:
        if list1[1] == '' and list1[2] == '':
            return list1[0] + han_list[0] + list1[3]
        elif list1[0] == '' and list1[2] == '':
            return list1[1] + han_list[0] + list1[3]
        elif list1[1] == '' and list1[3] == '':
            return list1[0] + han_list[0] + list1[2]
        else:
            return list1[0] + list1[1] + list1[2] + list1[3]
    else:
        return ""
#小数数字转汉字,只取两位
def fraction_to_hanstr(num):
    num = str(num)
    if len(num) == 1:
        num = "0" + num
    list1 = ["",""]
    for i in range(2):
        number = int(num[i])
        if number != 0:
            list1[i] = han_list[number] + fraction_unit_list[i]
    return "".join(list1)
#拆分整数部分,四位为一个单位
def split_integer(num):
    num = str(num)
    list1 = []
    while len(num) > 0:
        if len(num) <= 4:
            list1.append(num)
            break
        else:
            list1.append(num[-4:])
            num = num[0:-4]
    return list1
#函数入口
def num_to_han(num):
    if num > 999999999999999.93:
        return "This number is out of range."
    tuple1 = separate_integer_decimal(num)
    result =  fraction_to_hanstr(tuple1[1])
    integer_list = split_integer(tuple1[0])
    for i in range(len(integer_list)):
        han_str = four_to_hanstr(integer_list[i])
        if len(han_str) > 0:
            if i != 0 and integer_list[i-1][0] == '0':
                result = han_str + unit_list[i] + han_list[0] + result
            else:
                result = han_str + unit_list[i] + result
    return result
    

    
print(num_to_han(100006789.01))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值