为了账号安全,请及时绑定邮箱和手机立即绑定

如何把2274587.84如何快速的转换为大写:贰佰贰拾柒万肆仟伍佰捌拾柒元捌角肆分?(番外篇)

大家好,我是皮皮。

一、前言

前几天在Python黄金群【莫生气】问了一个Python数据处理的问题,需求如下:

大佬们,请教一个问题,2274587.84如何快速的转换为大写:贰佰贰拾柒万肆仟伍佰捌拾柒元捌角肆分?有没有工具或者网页啥的?不一定要Python实现。

前面两篇文章已经给大家很多方法了,今天在Python青铜群里,有个【听风无涯】分享了两个Python代码,亲测好使,这里分享给大家。

二、实现过程

固定的代码如下所示:

def number_to_chinese(num):
    chinese_units = ['', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万']
    chinese_nums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']

    num_str = str(round(num, 2))  # 将数字转换为字符串,并保留两位小数
    integer_part, decimal_part = num_str.split('.')  # 拆分整数和小数部分

    result = '元'
    # 处理整数部分
    for i, digit in enumerate(integer_part[::-1]):
        result = chinese_units[i] + result
        result = chinese_nums[int(digit)] + result

    # 处理小数部分
    if decimal_part == '00':
        result += '整'
    else:
        if decimal_part[0] != '0':
            result += chinese_nums[int(decimal_part[0])] + '角'
        if decimal_part[1] != '0':
            result += chinese_nums[int(decimal_part[1])] + '分'

    return result

# amount = 2274587.84
amount = 22745.00
chinese_amount = number_to_chinese(amount)
print(chinese_amount)

这里的数值需要自己提前写死,缺少了互动,不慌,这里他给了一份可以自定义输入数字的代码,如下所示:

def number_to_chinese(num):
    chinese_units = ['', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万']
    chinese_nums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']

    num_str = str(round(num, 2))  # 将数字转换为字符串,并保留两位小数
    integer_part, decimal_part = num_str.split('.')  # 拆分整数和小数部分

    result = '元'
    # 处理整数部分
    for i, digit in enumerate(integer_part[::-1]):
        result = chinese_units[i] + result
        result = chinese_nums[int(digit)] + result

    # 处理小数部分
    if decimal_part == '00':
        result += '整'
    else:
        if decimal_part[0] != '0':
            result += chinese_nums[int(decimal_part[0])] + '角'
        if decimal_part[1] != '0':
            result += chinese_nums[int(decimal_part[1])] + '分'

    return result

amount = float(input("请输入待转换的数值:"))
chinese_amount = number_to_chinese(amount)
print(chinese_amount)

两个代码都可以得到预期的效果,如下所示:

image.png

顺利地解决了粉丝的问题。不过后来我在测试的时候发现了一个小问题,前期代码整体上问题不大,但是针对有小数的数字进行处理的,必须要加小数,如果是整数,或者.00这样的,就会报错,需要稍微针对性的处理下,这里分享一个大小写转换(针对无小数点或者小数点后为0的情况)版本,代码如下所示:

def number_to_chinese(num):
    chinese_units = ['', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万']
    chinese_nums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']

    num_str = str(round(num, 2))  # 将数字转换为字符串,并保留两位小数
    integer_part, decimal_part = num_str.split('.')  # 拆分整数和小数部分

    result = '元'
    # 处理整数部分
    for i, digit in enumerate(integer_part[::-1]):
        result = chinese_units[i] + result
        result = chinese_nums[int(digit)] + result

    return result

# amount = 2274587.84
amount = 22745.00
chinese_amount = number_to_chinese(amount)
print(chinese_amount)

其实就是在之前处理小数点的基础上删减了小数处理的部分,这样遇到有小数点和无小数点的情况都可以进行处理了。

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python实战的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【莫生气】提问,感谢【听风无涯】给出的思路和代码解析,感谢【冯诚】、【平安是福】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

image.png

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消