数字转成人民币汉字大写(李刚著《疯狂Python讲义》P87,解决小数部分及多个零的问题。学习笔记)

#数字转人民币汉字大写

def divide(num):
    integer = int(num)
    fraction = round((num - integer) * 100)
    print("integer是:" +str(integer), "fraction是:" + str(fraction))
    return (str(integer), str(fraction))

'''
#快速将字符串转成列表,省了敲引号了。

a1 = '零壹贰叁肆伍陆柒捌玖'
a2 = [a1[i] for i in range(len(a1))]
a2
['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']

a1.split()也有类似效果

'''
han_list = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
unit_list = ['拾', '佰', '仟']
money_unit = ['角', '分']

def four_to_hanstr(num_str):
    #print("num_str是:"+ num_str)
    result = ''
    num_len = len(num_str)
    for i in range(num_len):
        num = int(num_str[i])
        if (i != num_len -1) and (num != 0):
            result += han_list[num] + unit_list[num_len -2 -i]
        else:
            result += han_list[num]
    #print("result是:" + result)
    return result

def integer_to_str(num_str):
    str_len = len(num_str)
    if str_len >12:
        print("数字太大,翻译不了!")
        return
    elif str_len >8:
        return four_to_hanstr(num_str[:8])+"亿" +\
                             four_to_hanstr(num_str[-8:-4]) + "万" +\
                             four_to_hanstr(num_str[-4:])
    elif str_len >4:
        return four_to_hanstr(num_str[:-4]) + "万" +\
                             four_to_hanstr(num_str[-4:])
    else:
        return four_to_hanstr(num_str)

#小数部分转成汉字
def fraction_to_str(fraction):
    if int(fraction) == 0:        
        result = ""
    elif len(fraction)==2:
        a = int(fraction[-2])
        b = int(fraction[-1])
        result = han_list[a] + "角" + han_list[b] + "分"
    elif len(fraction)  ==1:
        b = int(fraction[-1])
        result = "零" +han_list[b] + "分"  #此处直接把“零角”写作“零几分”        
    else:
        pass
    return result

num = float(input("请输入一个浮点数: "))
integer, fraction = divide(num)

result_f = integer_to_str(integer) + "元" + fraction_to_str(fraction)


#删除多余的零
'''
for i in range(len(result_f )):    
    result_f  = result_f.replace( "零分", "")
    result_f  = result_f.replace( "零元", "元")
    result_f  = result_f.replace( "零拾", "拾")
    result_f  = result_f.replace( "零佰", "佰")
    result_f  = result_f.replace( "零仟", "仟")
    result_f  = result_f.replace( "零万", "万")
    result_f  = result_f.replace( "零亿", "亿")
    result_f  = result_f.replace( "零零", "零")
    result_f  = result_f.replace( "零整", "")
'''

for i in range(len(result_f)):
    result_f  = result_f.replace( "零分", "")
    result_f  = result_f.replace( "零整", "")
    
    units1 = '元拾佰仟万亿零'
    for u in range(len(units1)):
        result_f  = result_f.replace( "零" + units1[u], units1[u])


if result_f[-1] != '分':
    result_f =  result_f + "整"
    
print(result_f)

        

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用和引用[2]提到了一种方法,可以利用Python将阿拉伯数字转化为中文大写。这个方法采用拆分法则,先将大数字拆分成整数部分小数部分,然后按照仟、万、亿、兆的分位拆分整数部分为四个字符串组成的列表。每个字符串最多包含四个字符。接下来,对每个分位的字符串使用中文大写函数转换成中文大写。最后将转换后的结果合并起来。 具体步骤如下: 1. 将输入的数字拆分成整数部分小数部分。 2. 将整数部分按照仟、万、亿、兆的分位拆分为四个字符串组成的列表。 3. 对每个分位的字符串使用中文大写函数转换成中文大写。 4. 将转换后的结果合并起来。 这样就能够将输入的数字转换成中文大写数字了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python将阿拉伯数字转化为中文大写](https://blog.csdn.net/weixin_32942557/article/details/113722858)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python数字转化为中文大写的实例代码](https://blog.csdn.net/weixin_30578645/article/details/114398149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值