Python数字转人民币读法

# 数字转人民币读法   (考虑到数据连续为零及小数的处理,但可能还需优化)

# 定义中文列表
chinese_list = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
# 以4位分隔定义单位
unit_list = ['十', '百', '千']
# 小数单位
decimal_list = ['角', '分']

def divide_str(num):
    # 将一个浮点类型的数据强制转成int型,获取其整数及小数部分内容(小数四舍五入)
    # 获取输入字符串的整数内容
    int_num = int(num)
    # 获取输入字符串的小数内容(四舍五入)
    float_num = round((num - int_num) * 100)
    # 以元组格式返回数据('xxxx', 'xx')
    return (str(int_num), str(float_num))

# 定义四位数的转换方式
def four_to_handstr(num_str):
    result = ""
    num_len = len(num_str)
    # 依次遍历字符串中的每一位数字
    for i in range(num_len):
        # 把字符串转化成数值
        num = int(num_str[i])
        # 不是最后一位数字并且值不为0
        if i != num_len - 1 and num != 0:
            # 转化为中文且添加对应的单位
            result += chinese_list[num] + unit_list[num_len - 2 - i]
        # 如果不是最后一位数字,且连续显示两个零
        elif i != num_len - 1 and num_str[i] == "0" and num_str[i + 1] == "0":
            continue
        # 最后一位数字为零
        elif i == num_len - 1 and num_str[i] == '0':
            continue
        elif i == num_len - 1 and num_str[i] == "0" and num_str[i + 1] == "0":
            continue
        else:
            # 直接显示数字,不需添加单位信息
            result += chinese_list[num]
    return result

print(four_to_handstr('1000'))              # 壹千
print(four_to_handstr('1100'))              # 壹千壹百
print(four_to_handstr('1110'))              # 壹千壹百壹十
print(four_to_handstr('1001'))              # 壹千零壹
print(four_to_handstr('1010'))              # 壹千零壹十
print(four_to_handstr('1101'))              # 壹千壹百零壹

# 定义角分函数
def jiaofen_to_handstr(jiaofen_str):
    result = ""
    num_len = len(jiaofen_str)
    # 依次遍历字符串中的每一位数字
    for i in range(num_len):
        # 把字符串转化成数值
        num = int(jiaofen_str[i])
        result += chinese_list[num] + decimal_list[i]
    return result
    
print(jiaofen_to_handstr('05'))         # 零角伍分
print(jiaofen_to_handstr('36'))         # 叁角陆分

def integer_to_str(num_str, jiaofen_str):
    str_len = len(num_str)
    if str_len > 12:
        print("数字太大,翻译不了,请重新输入!")
    elif str_len > 8:
        return four_to_handstr(num_str[:-8]) + '亿' \
               + four_to_handstr(num_str[-8:-4]) + '万' \
               + four_to_handstr(num_str[-4:]) + '元' + jiaofen_to_handstr(jiaofen_str)
    elif str_len > 4:
        return four_to_handstr(num_str[:-4]) + '万' \
               + four_to_handstr(num_str[-4:]) + '元' + jiaofen_to_handstr(jiaofen_str)
    else:
        return four_to_handstr(num_str) + '元' + jiaofen_to_handstr(jiaofen_str)

# num = float(input("请输入一个浮点数:\n"))
integer, fraction = divide_str(130020010025.236)
print(integer_to_str(integer, fraction))
integer, fraction = divide_str(12500010023.236)
print(integer_to_str(integer, fraction))
integer, fraction = divide_str(10023200.236)
print(integer_to_str(integer, fraction))
# 壹千
# 壹千壹百
# 壹千壹百壹十
# 壹千零壹
# 壹千零壹十
# 壹千壹百零壹
# 零角伍分
# 叁角陆分
# 壹千叁百亿贰千零壹万零贰十伍元贰角肆分
# 壹百贰十伍亿零壹万零贰十叁元贰角肆分
# 壹千零贰万叁千贰百元贰角肆分
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值