零基础实操 | Python实现数字转人民币(大写汉字)源代码
大家好,我是吒吒。
我们的工作中遇到一些问题,不依靠工具的话,改起来真的超级麻烦,还会遗漏。有个小伙伴提出怎么把数字转成人民币(大写汉字),Python还真的可以做到,并且挺简单的,新手都可以操作。下面附上源代码,可以拿去练手。
估计工作上要修改Python实现数字转人民币(大写汉字)源代码,运行截图:
完整程序代码:
import warnings
from decimal import Decimal
def cncurrency(value, capital=True, prefix=False, classical=None):
'''
人民币数字转大写汉字,参数:
capital: True 大写汉字金额
False 一般汉字金额
classical: True 元
False 圆
prefix: True 以'人民币'开头
False, 无开头
'''
if not isinstance(value, (Decimal, str, int)):
msg = '''
由于浮点数精度问题,请考虑使用字符串,或者 decimal.Decimal 类。
'''
warnings.warn(msg, UserWarning)
# 默认大写金额用圆,一般汉字金额用元
if classical is None:
classical = True if capital else False
# 汉字金额前缀
if prefix is True:
prefix = '人民币'
else:
prefix = ''
# 汉字金额字符定义
dunit = ('角', '分')
if capital:
num = ('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖')
iunit = [None, '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万', '拾', '佰', '仟']
else:
num = ('〇', '一', '二', '三', '四', '五', '六', '七', '八', '九')
iunit = [None, '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千']
if classical:
iunit[0] = '元' if classical else '圆'
# 转换为Decimal,并截断多余小数
if not isinstance(value, Decimal):
value = Decimal(value).quantize(Decimal('0.01'))
# 处理负数
if value < 0:
prefix += '负' # 输出前缀,加负
value = - value # 取正数部分,无须过多考虑正负数舍入
# assert - value + value == 0
# 转化为字符串
s = str(value)
if len(s) > 19:
raise ValueError('金额太大了,不知道该怎么表达。')
istr, dstr = s.split('.') # 小数部分和整数部分分别处理
istr = istr[::-1] # 翻转数部分字符串
so = [] # 用于记录转换结果
# 零
if value == 0:
return prefix + num[0] + iunit[0]
haszero = False # 用于标记零的使用
if dstr == '00':
haszero = True # 如果无小数部分,则标记加过零,避免出现“圆零整”
# 处理小数部分
# 分
if dstr[1] != '0':
so.append(dunit[1])
so.append(num[int(dstr[1])])
else:
so.append('整') # 无分,则加“整”
# 角
if dstr[0] != '0':
so.append(dunit[0])
so.append(num[int(dstr[0])])
elif dstr[1] != '0':
so.append(num[0]) # 无角有分,添加“零”
haszero = True # 标记加过零了
# 无整数部分
if istr == '0':
if haszero: # 既然无整数部分,那么去掉角位置上的零
so.pop()
so.append(prefix) # 加前缀
so.reverse() # 翻转
return ''.join(so)
# 处理整数部分
for i, n in enumerate(istr):
n = int(n)
if i % 4 == 0: # 在圆、万、亿等位上,即使是零,也必须有单位
if i == 8 and so[-1] == iunit[4]: # 亿和万之间全部为零的情况
so.pop() # 去掉万
so.append(iunit[i])
if n == 0: # 处理这些位上为零的情况
if not haszero: # 如果以前没有加过零
so.insert(-1, num[0]) # 则在单位后面加零
haszero = True # 标记加过零了
else: # 处理不为零的情况
so.append(num[n])
haszero = False # 重新开始标记加零的情况
else: # 在其他位置上
if n != 0: # 不为零的情况
so.append(iunit[i])
so.append(num[n])
haszero = False # 重新开始标记加零的情况
else: # 处理为零的情况
if not haszero: # 如果以前没有加过零
so.append(num[0])
haszero = True
# 最终结果
so.append(prefix)
so.reverse()
return ''.join(so)
i = input('请输入金额:')
print("转换成人民币读法是:", cncurrency(i))
怎么样看完学废了吗?最后,如果你也有Python爱好者,我这里也整理了一套完整的新手学习路线跟资料,戳下面名片找小助理领取
零基础实操 | Python实现数字转人民币(大写汉字)源代码相关推荐
- TheBrain零基础实操教程——如何定制TheBrain界面使用环境?
TheBrain(点击下载),您的终极数字记忆和无限思维导图软件.我们从一个想法跳到另一个想法,构建越来越复杂的网络,直到新想法形成.TheBrain允许你以同样的方式组织你的信息,而不限制你预先确定 ...
- 零基础学python pdf-笔记《零基础入门学习Python(第2版)》PDF+课件+代码分析
通过自学编程,感觉到基础知识很重要,越到后面越能发现这一点,光记住是不行的,还要灵活运用,要多调试代码,计算机就是一个不断练习,不断遇到问题,解决问题的工种,要根据实际的业务能想到对应的语法,实际项目 ...
- python爬虫ppt_完全零基础 轻松学Python:数据类型:数字类型、空类型、布尔类型...
Tip:点击上方或此处 "#完全零基础 轻松学Python" 话题,查看更多内容,欢迎点赞.分享.收藏,谢谢支持! 内 容 概 要 1. 数据类型概述 数据类型的概念.常见的八种数 ...
- 【GIS人必学】零基础学习ArcGIS Python脚本开发训练营来了
Python作为一种高级程序设计语言,凭借其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言.ArcGIS软件由于其面向地理问题的科学理念,不断创新的技术方法,已在国内外市场占据了主导地位.Py ...
- 零基础如何学习Python?
今天小编要跟大家分享的文章是关于零基础如何学习Python?很多想要学习Python技术的零基础学员都想知道如何才能快速入门Python.想要学习Python的小伙伴们快来和小编一起看一看吧! 一.P ...
- 零基础入门学习Python,我与python的第一次亲密接触后的感受!
前言:Python是适合初学者入门最好的语言 Python适合初学者入门最好的语言 人工智能用Python?高考要加入Python?现在连微软官方Excel都要把Python作为官方语言!Python ...
- python编程零基础免费网课-Python网课推荐——免费学习Python编程
对于想要学习python的初学者,面对网上大量的学习素材无从下手.今天小编就整理了一份详细的python教学视频合集,希望能为初学者提供一些学习的方向. 1.python入门 课程推荐:零基础入门学习 ...
- 零基础可以学python吗-零基础适合学Python吗?小白能否学会Python?
原标题:零基础适合学Python吗?小白能否学会Python? 我没学过编程,能否学会Python? 肯定的回答您:完全能学会 其实,很多个程序员都是从不会到会,每种知识也是从基础到复杂,大家都是从零 ...
- 零基础入门学习Python,我与python的第一次亲密接触后的感受
前言:Python是适合初学者入门最好的语言 Python适合初学者入门最好的语言 人工智能用Python?高考要加入Python?现在连微软官方Excel都要把Python作为官方语言!Python ...
最新文章
- R语言如何将字符串转变为命令执行
- Java提升篇:理解String 及 String.intern() 在实际中的应用
- SAP 主生产计划(MPS)
- 回顾一下Unix哲学
- 快速开平方取倒数的算法
- Python----常用模块1
- c语言程序设计多个文件,c语言如何单文件变多文件(2个文件),求大神帮忙!!...
- 数据类型的内置方法:元组
- HTML(Hepertext Markup Language 超文本标记语言)
- 天线工程手册_胆大心细 专业敬业——记FPSO改装MV30项目球形天线组装工程
- OEL修改字符集失败 -bash: /root: is a directory
- wxpython安装不上怎么回事_安装Python - wxPython失败的解决方法
- 文本分割器TXTSpliter
- 马原复习思维导图-前三章
- WIN10设置护眼 豆沙绿
- 计算机的硬盘u盘属于什么,移动硬盘和机械硬盘有什么区别?
- http://www.cnblogs.com/dolphin0520/p/3923167.html
- 基于多线程的随机数生成算法
- SVG开发包, 20 个有用的 SVG 工具,提供更好的图像处理
- 如何将零碎信息结构化并做到有序安放,以实现知识积累?