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

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

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

大家好,我是皮皮。

一、前言

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

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

使用百度上查到的代码,似乎不太好用,

代码语言:javascript
复制
def num2chinese(num):
    chinese_num = ["零", "壹", "贰", "参", "肆", "伍", "陆", "柒", "捌", "玖"]
    chinese_unit = ["", "拾", "佰", "仟", "万", "亿"]
    num_str = str(num)
    num_len = len(num_str)
    chinese_str = ''
    zero_flag = False
    for i in range(num_len):
        j = int(num_str[i])
        if i == 8:
            zero_flag = True
        else:
            if zero_flag:
                chinese_str += chinese_num[0]
                zero_flag = False
            chinese_str += chinese_num[j] + chinese_unit[num_len - i - 1]

    if zero_flag:
        chinese_str += chinese_num[0]
    return chinese_str


if __name__ == '__main__':
    print(num2chinese(135496))

代码运行之后出错,和实际预期的结果还是有差距的。

而且一旦假如小数,比方说有角分这样的,直接报错了。

二、实现过程

后来在讯飞星火上问到了一个答案,代码如下所示:

代码语言:javascript
复制

def num_to_chinese(num):

    chinese_num = {

        0: "零",

        1: "一",

        2: "二",

        3: "三",

        4: "四",

        5: "五",

        6: "六",

        7: "七",

        8: "八",

        9: "九"

    }

    chinese_unit = ["", "十", "百", "千", "万", "亿"]

    chinese_str = ""

    unit_index = 0

    for i in str(num):

        if i.isdigit():

            chinese_str += chinese_num[int(i)] + chinese_unit[unit_index]

            unit_index += 1

        else:

            chinese_str += i

    return chinese_str.strip("零") or "零"



num = 2274587.84

result = num_to_chinese(num)

print(result)

代码花里胡哨的,但是解决不了问题,一跑就出现数组越界的错误,尝试调教,说他错了,他仍然给你旧代码,甚至还给你一个不沾边的代码,整无语了。

后来问了Zelinna,给的代码看上去像那么回事,代码如下:

代码语言:javascript
复制
这个需求可以使用Python的数字转中文工具——`chinese_converter`来实现,以下是用Python代码实现这个功能的示例。

```python
# 首先需要安装 chinese_converter 包,运行以下指令即可
# pip install chinese_converter

from chinese_converter import num_to_chinese

num = 2274587.84
num_str = str(int(num))  # 转换为整型并转换为字符串
num_chinese_upper = num_to_chinese(num_str, False, True) + '元' # 转换为大写并加上“元”
# 去掉无效小数位
decimal = round(num - int(num), 2) # 取小数位并保留两位
if decimal > 0:
    decimal_str = str(decimal)[2:]
    # 转换小数部分的数字
    for i, d in enumerate(decimal_str):
        num_chinese_upper += num_to_chinese(int(d)) + ('角' if i == 0 else '分')
print(num_chinese_upper)


# 输出结果为:贰佰贰拾柒万肆仟五佰八拾七元捌角四分。

# 运行成功可以将任意数字转为大写中文数字。如果你在开发中需要经常进行数字和中文之间的转换,这个工具可以提高你的工作效率。

不过安装这个库之后,竟然报错,说里边对应的方法竟然不存在,这。。。很尴尬,还占用我内存,反手就uninstall掉了。

最后用了Excel设置单元格格式,好家伙,找到数据,然后右键-->设置单元格格式-->特殊-->人民币大写,就完事了,而且多行数据的话,直接一个填充就完事了,比问C老师,Z老师,K老师快得多!

顺利地解决了粉丝的问题。

后来【甯同学】,还给了一个方法。搜狗输入法,输入v+数字直接就是了。

三、总结

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

最后感谢粉丝【莫生气】提问,感谢【巭孬嫑勥烎】给出的思路和代码解析,感谢【Ineverleft】、【瑜亮老师】等人参与学习交流。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、实现过程
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档