前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何把2274587.84如何快速的转换为大写:贰佰贰拾柒万肆仟伍佰捌拾柒元捌角肆分?(番外篇)

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

作者头像
前端皮皮
发布2023-08-17 09:32:43
1190
发布2023-08-17 09:32:43
举报

大家好,我是皮皮。

一、前言

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

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

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

二、实现过程

固定的代码如下所示:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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)

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

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

代码语言:javascript
复制
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实战的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python共享之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、实现过程
  • 三、总结
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档