python大写金额算法
大写金额算法在网上也有很多,但是试了好多都有这儿那儿的问题,于是本仙穿越时空回到小学,重新审视大写金额的规则,发现了其中各种花里呼哨的大写奥秘,于是本仙施法让计算机瞬间学习大写规则。
本仙采用面向对象仙术施展仙法,念完咒语class一个对象就产生了。
class BigNum(object):pass
一、给计算机硬塞几颗仙丹,让计算机快速认识阿拉伯数字与中文大写数字的对应关系,同时学会数位汉字和货币单位汉字。
class BigNum(object):# 定义大写数字字典dxzd = {'.':'点','0':'零','1':'壹','2':'贰','3':'叁','4':'肆','5':'伍','6':'陆','7':'柒','8':'捌','9':'玖'}# 定义数位列表swlb = ['元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟']# 定义货币单位hbdw = ['分','角','元']# 定义初始化方法def __init__(self,num):self.dxzd = BigNum.dxzdself.swlb = BigNum.swlbself.hbdw = BigNum.hbdwself.num = num
二、采用仙术让计算机学会四舍五入
python3似乎自带此仙术,可是会发现此仙术不太灵通
>>> print(round(1.055,2))
1.05
自定义四舍五入仙术
# 定义四舍五入方法def sswr(self,num,n):# 如果第n-1位上的数值小于5if int(num*(10**(n+1)))-int(num*(10**(n)))*10 < 5:# 直接舍弃第n-1位上的值return int(num*(10**(n)))/(10**(n))# 否则else:# 舍弃第n-1位上的值,并且第n位上的值+1return int(num*(10**(n))+1)/(10**(n))
三、采用仙术让计算机先学会收据上的那种大写规则
# 大写金额def dxje(self):# 金额小写拆分numlist = list(str(self.sswr(self.num,2)))# 转换大写数字numlist = [self.dxzd[i] for i in numlist]# 连接大写数字numstr = ''.join(numlist)# 整数部分连接金额zsbf = numstr.rpartition('点')[0]n = len(zsbf)self.zsdx = ''for i in range(n):self.zsdx = self.zsdx + zsbf[i]# print(zsbf[i],end='')self.zsdx = self.zsdx + self.swlb[n-i-1]# print(swlb[n-i-1],end='')# 小数部分xsbf = numstr.rpartition('点')[2]if len(xsbf) == 1:xsbf += '零'# print(xsbf)n = len(xsbf)self.xsdx = ''for i in range(n):self.xsdx = self.xsdx + xsbf[i]# print(xsbf[i],end='')self.xsdx = self.xsdx + self.hbdw[n-i-1]# print(hbdw[n-i-1],end='')
四、采用递归仙术处理零
# 清理重复零值def xclz(self,numstr):# 如果没有重复零值if re.findall('零\w零',numstr) == []:# 返回结果if numstr[-1] == '零':return numstr[0:-1]else:return numstr# 否则else:# 递归清除零值return self.xclz(numstr.replace(re.findall('零\w零',numstr)[0],'零'))
五、综合施展仙术
import re
class BigNum(object):# 定义大写数字字典dxzd = {'.':'点','0':'零','1':'壹','2':'贰','3':'叁','4':'肆','5':'伍','6':'陆','7':'柒','8':'捌','9':'玖'}# 定义数位列表swlb = ['元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟']# 定义货币单位hbdw = ['分','角','元']# 定义初始化方法def __init__(self,num):self.dxzd = BigNum.dxzdself.swlb = BigNum.swlbself.hbdw = BigNum.hbdwself.num = num# 定义四舍五入方法def sswr(self,num,n):# 如果第n-1位上的数值小于5if int(num*(10**(n+1)))-int(num*(10**(n)))*10 < 5:# 直接舍弃第n-1位上的值return int(num*(10**(n)))/(10**(n))# 否则else:# 舍弃第n-1位上的值,并且第n位上的值+1return int(num*(10**(n))+1)/(10**(n))# 清理重复零值def xclz(self,numstr):# 如果没有重复零值if re.findall('零\w零',numstr) == []:# 返回结果if numstr[-1] == '零':return numstr[0:-1]else:return numstr# 否则else:# 递归清除零值return self.xclz(numstr.replace(re.findall('零\w零',numstr)[0],'零'))# 大写金额def dxje(self):# 金额小写拆分numlist = list(str(self.sswr(self.num,2)))# 转换大写数字numlist = [self.dxzd[i] for i in numlist]# 连接大写数字numstr = ''.join(numlist)# 整数部分连接金额zsbf = numstr.rpartition('点')[0]n = len(zsbf)self.zsdx = ''for i in range(n):self.zsdx = self.zsdx + zsbf[i]# print(zsbf[i],end='')self.zsdx = self.zsdx + self.swlb[n-i-1]# print(swlb[n-i-1],end='')# print(self.zsdx)# 整数部分清除零值li = ['万','亿']for i in li:self.zsdx = self.zsdx.replace(i,'&')numlist = self.zsdx[0:-1].split('&')numlist = [self.xclz(i) for i in numlist]# print(numlist)# 整数部分加回单位n = len(numlist)li = ['元','万','亿']self.zsdx = ''for i in range(n):self.zsdx = self.zsdx + numlist[i]# print(numlist[i],end='')self.zsdx = self.zsdx + li[n-i-1]# print(li[n-i-1],end='')# print(self.zsdx)# # 清理零值后面的数位li = ['零仟','零佰','零拾']for i in li:self.zsdx = self.zsdx.replace(i,'零')self.zsdx = self.zsdx.replace('亿万','亿零')# print(self.zsdx)# 小数部分xsbf = numstr.rpartition('点')[2]if len(xsbf) == 1:xsbf += '零'# print(xsbf)n = len(xsbf)self.xsdx = ''for i in range(n):self.xsdx = self.xsdx + xsbf[i]# print(xsbf[i],end='')self.xsdx = self.xsdx + self.hbdw[n-i-1]# print(hbdw[n-i-1],end='')if self.xsdx == '零角零分':self.xsdx = '整'elif self.xsdx[-2:] == '零分':self.xsdx = self.xsdx[0:2]+'整'elif self.xsdx[0:2] == '零角':self.xsdx = '零'+self.xsdx[-2:]def __str__(self):return self.zsdx + self.xsdx
def rmbdx(num):bignum = BigNum(num)bignum.dxje()return bignum.zsdx + bignum.xsdx
def main():print(rmbdx(5600030800.9896))print(rmbdx(5000030800.9896))
if __name__ == '__main__':main()output:
伍拾陆亿零叁万零捌佰元玖角玖分
伍拾亿零叁万零捌佰元玖角玖分
这是本仙在CSDN上首次施法,望各位也使用仙法点赞加转发加收藏加测试加质疑。本仙会不定期回复。
python大写金额算法相关推荐
- GitHub超4.1万星,最全Python入门算法来了
本文来自公众号:超级数学建模 微信号 :supermodeling 今天,阿广给大家推荐一个好资源,一个在 Github 上超过 2.7 万星标的项目:最全算法及Python实现. 该项目主要包括两方 ...
- 计算机书籍-Python机器学习算法大全
书名:Python机器学习算法 作者:赵志勇 出版社: 电子工业出版社 ISBN:9787121313196 去当当网了解
- python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索
python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索 Jeff Dean在ICML 2019上进行了有关AutoML的演讲,并将自动化分为4个级别 手动构造预测变量,不引入学习的 ...
- python基本算法语句_Python中基本且又常用的算法
这篇文章主要学习Python常用算法,Python常用排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algo ...
- Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
Django 官网 有详细的使用说明,这里只做简单记录. 1.起因 Java 项目用到了 Python 的类库,使用jython-standalone在 idea 里可以调用,但是部署时模块无法找到, ...
- Python 多种算法模型对比
Python 多种算法模型对比 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 算法模型对比简介 可以对同一份训练数据集应用多 ...
- python字符串的冒泡排序_如何实现python冒泡排序算法?
冒泡排序是一种简单的排序技术,它通过比较相邻的元素遍历整个列表,对它们进行排序并交换元素,直到对整个列表进行排序. 算法:给定一个包含n个元素的列表L,这些元素的值或记录为L0, L1,-,Ln-1, ...
- 回归素材(part8)--python机器学习算法
学习笔记,仅供参考,有错必纠 文章目录 python机器学习算法 基本线性回归 线性回归的模型 线性回归模型的损失函数 线性回归的最小二乘法 线性回归的最小二程解法 牛顿法 基本牛顿法原理 基本牛顿法 ...
- python信息找人的算法_算法篇-python查找算法
上一篇的递归算法中,了解到算法的复杂度.递归就是在函数中调用本身. 在汉诺塔游戏例子中,如果你需要移动的盘子很多时,程序运行就会消耗很长时间来计算结果.可以回顾下 ->算法篇-python递归算 ...
- python常用算法有哪些_python常见的排序算法有哪些?
大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个 ...
最新文章
- 7 Papers Radios | NeurIPS 2020最佳论文;全卷积网络实现E2E目标检测
- Android表格布局(Table Layout)
- android4 设置栈大小,【技术分享】Android内核漏洞利用技术实战:环境搭建栈溢出实战...
- 机器学习中用到的概率知识_机器学习中有关概率论知识的小结
- 三种单例模式的C++实现
- flink运行原理_Flink运行架构剖析
- 如何判断一个创业公司是否有发展潜力
- Keras 报错:An operation has `None` for gradient.
- 每天CookBook之Python-003
- VALSE学习(十四):自主学习
- Linux创建内核线程kthread_create的用法介绍
- 二叉树查找后继节点(即中序遍历情况下的这个节点的下一个) Python实现
- 复盘:windows ubuntu 双系统引导恢复、分区表恢复
- JUnit学习笔记6---用stub进行粗粒度测试
- 不同电脑进入bios按键汇总
- MySQL报错`ERROR: No query specified`
- 我国个人缴税计算实例
- Visual studio 2019使用Microsoft Speech SDK 5.1语音识别
- 华为OD机试真题2023(JAVA)
- 什么是同构与异构?及在不同背景下的理解