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

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

时间:2023-07-19 16:34:58浏览次数:30  
标签:num chinese decimal amount part 伍佰 肆分 番外篇 result

大家好,我是皮皮。

一、前言

前几天在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

标签:num,chinese,decimal,amount,part,伍佰,肆分,番外篇,result
From: https://www.cnblogs.com/dcpeng/p/17565974.html

相关文章

  • 如何把2274587.84如何快速的转换为大写:贰佰贰拾柒万肆仟伍佰捌拾柒元捌角肆分?(上篇)
    大家好,我是皮皮。一、前言前几天在Python黄金群【莫生气】问了一个Python数据处理的问题,需求如下:大佬们,请教一个问题,2274587.84如何快速的转换为大写:贰佰贰拾柒万肆仟伍佰捌拾柒元捌角肆分?有没有工具或者网页啥的?不一定要Python实现。二、实现过程这里【巭孬嫑勥烎】给了一个......
  • 伍佰以内的爱
    伍佰SUMMER TIME     两年前,朋友介绍了一个女孩给我认识。她的美貌与活泼性格吸引了我,而她对我的感觉也同样显而易见。我们几次电话交流后,决定在避风塘水吧见面,这算是我们的初次约会。SUMMER YOUTH DAY    然而,在那天下午,当我准时到达酒吧却等待了40分钟之久,......
  • 番外篇——成功率100%的通达信指标公式,你敢相信吗?
    前几天,有人问能不能把通达信副图公式改成选股公式。我把指标公式加载到副图(如上图),发现这个指标真是牛了,成功率100%,发出信号的之后两天,总是能涨。难道找到了交易的圣杯,如果按照这样的成功率,即使每次盈利只有1%,不出几年就可以脚踢巴菲特,拳打索罗斯了。真的有这种好事吗? 代码......
  • 番外篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码)
    今日鸡汤夕阳无限好,只是近黄昏。    大家好,我是Python进阶者。    是不是觉得很诧异?明明上周刚发布了这篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码),今天又来一篇,名曰番外篇!其实今天是想给大家分享【......
  • (番外篇)分享一些雷达天线布局
    之前逛闲鱼和某宝,看到了一些天线的布局图,分享给大家。就当作茶余、饭后、睡前打发时间,就当作艺术品观赏一下即可。1.2.3.4.5.67.还有很多天线的布局方式,需要各位自己花时间去寻找了,其实天线的布局图不是最关键的,最关键的是能够分析为什么要这么布局,优缺点是什么,以及我们如何改进?读......
  • 番外篇--O2O的理解
    O2O即OnlineToOffline(在线离线/线上到线下),是指将线下的商务机会与互联网结合,让互联网成为线下交易的平台。  实现O2O营销模式的核心是在线支付。  对本地商家来说,O2O模式要求消费者网站支付,支付信息会成为商家了解消费者购物信息的渠道,方便商家对消费者购买数据的搜集,进而......
  • Quarkus系列——Vert.x应用(番外篇)
    前言由于客观原因(穷)导致博客首页加载时间有点慢,大概需要3秒才能加载出服务端渲染的基础页面。所以想着能够提高首页加载速度,我决定在nginx上做个缓存。为了不影响内容的及时更新,我设置的缓存的有效期仅为10分钟。这样导致在缓存过期后第一次加载页面会cachemiss,所以为了解决这个......
  • NLP 开源形近字算法之相似字列表(番外篇)
    创作目的国内对于文本的相似度计算,开源的工具是比较丰富的。但是对于两个汉字之间的相似度计算,国内基本一片空白。国内的参考的资料少的可怜,国外相关文档也是如此。本项......
  • NLP 开源形近字算法之相似字列表(番外篇)
    创作目的国内对于文本的相似度计算,开源的工具是比较丰富的。但是对于两个汉字之间的相似度计算,国内基本一片空白。国内的参考的资料少的可怜,国外相关文档也是如此。本项......
  • Spring番外篇
    Spring番外篇......