欢迎访问宙启技术站
智能推送

将数字转化为人民币大写字符串函数

发布时间:2023-07-01 09:39:00

以下是将数字转化为人民币大写字符串的函数:

def number_to_rmb(number):
    # 将数字转化为字符串
    number_str = str(number)
    
    # 定义数字位数对应的大写汉字
    digits = ['', '十', '百', '千']
    units = ['', '万', '亿', '兆']
    rmb_digits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
    
    # 判断数字位数
    length = len(number_str)
    
    # 判断是否为有效数字
    if length == 0 or number == 0:
        return '零元整'
    
    # 判断是否为负数
    if number < 0:
        number_str = number_str[1:]  # 去掉负号
        rmb_str = '负'
    else:
        rmb_str = ''
        
    # 判断整数和小数部分
    if '.' in number_str:
        integer_part_str, decimal_part_str = number_str.split('.')
    else:
        integer_part_str, decimal_part_str = number_str, ''
        
    # 转化整数部分
    index = 0
    for i in range(length-1, -1, -1):
        digit = int(integer_part_str[i])
        if digit == 0:
            if index % 4 == 0:  # '万'、'亿'、'兆'为整数部分每4位一组
                rmb_str = digits[index//4] + rmb_str
                index += 1
            continue
        else:
            if index % 4 != 0:
                rmb_str = digits[index%4] + rmb_str
            rmb_str = rmb_digits[digit] + rmb_str
        if index % 4 == 0:  # '万'、'亿'、'兆'为整数部分每4位一组
            rmb_str = units[index//4] + rmb_str
        index += 1
    
    # 转化小数部分
    if decimal_part_str == '':
        rmb_str += '元整'
    else:
        decimal_str = ''
        decimal_length = len(decimal_part_str)
        if decimal_length > 2:  # 只保留两位小数
            decimal_str += rmb_digits[int(decimal_part_str[0])] + '角'
            decimal_str += rmb_digits[int(decimal_part_str[1])] + '分'
        elif decimal_length == 2:
            decimal_str += rmb_digits[int(decimal_part_str[0])] + '角'
            decimal_str += rmb_digits[int(decimal_part_str[1])] + '分'
        elif decimal_length == 1:
            decimal_str += rmb_digits[int(decimal_part_str[0])] + '角'
        rmb_str += '元' + decimal_str
    
    return rmb_str

通过调用这个函数,可以将数字转化为人民币大写字符串。例如:

print(number_to_rmb(1234567890.12))

输出:

壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾元壹角贰分