大写金额算法在网上也有很多,但是试了好多都有这儿那儿的问题,于是本仙穿越时空回到小学,重新审视大写金额的规则,发现了其中各种花里呼哨的大写奥秘,于是本仙施法让计算机瞬间学习大写规则。

本仙采用面向对象仙术施展仙法,念完咒语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大写金额算法相关推荐

  1. GitHub超4.1万星,最全Python入门算法来了

    本文来自公众号:超级数学建模 微信号 :supermodeling 今天,阿广给大家推荐一个好资源,一个在 Github 上超过 2.7 万星标的项目:最全算法及Python实现. 该项目主要包括两方 ...

  2. 计算机书籍-Python机器学习算法大全

    书名:Python机器学习算法 作者:赵志勇 出版社: 电子工业出版社 ISBN:9787121313196 去当当网了解

  3. python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索

    python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索 Jeff Dean在ICML 2019上进行了有关AutoML的演讲,并将自动化分为4个级别 手动构造预测变量,不引入学习的 ...

  4. python基本算法语句_Python中基本且又常用的算法

    这篇文章主要学习Python常用算法,Python常用排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algo ...

  5. Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享

    Django 官网 有详细的使用说明,这里只做简单记录. 1.起因 Java 项目用到了 Python 的类库,使用jython-standalone在 idea 里可以调用,但是部署时模块无法找到, ...

  6. Python 多种算法模型对比

    Python 多种算法模型对比 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 算法模型对比简介 可以对同一份训练数据集应用多 ...

  7. python字符串的冒泡排序_如何实现python冒泡排序算法?

    冒泡排序是一种简单的排序技术,它通过比较相邻的元素遍历整个列表,对它们进行排序并交换元素,直到对整个列表进行排序. 算法:给定一个包含n个元素的列表L,这些元素的值或记录为L0, L1,-,Ln-1, ...

  8. 回归素材(part8)--python机器学习算法

    学习笔记,仅供参考,有错必纠 文章目录 python机器学习算法 基本线性回归 线性回归的模型 线性回归模型的损失函数 线性回归的最小二乘法 线性回归的最小二程解法 牛顿法 基本牛顿法原理 基本牛顿法 ...

  9. python信息找人的算法_算法篇-python查找算法

    上一篇的递归算法中,了解到算法的复杂度.递归就是在函数中调用本身. 在汉诺塔游戏例子中,如果你需要移动的盘子很多时,程序运行就会消耗很长时间来计算结果.可以回顾下 ->算法篇-python递归算 ...

  10. python常用算法有哪些_python常见的排序算法有哪些?

    大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个 ...

最新文章

  1. 7 Papers Radios | NeurIPS 2020最佳论文;全卷积网络实现E2E目标检测
  2. Android表格布局(Table Layout)
  3. android4 设置栈大小,【技术分享】Android内核漏洞利用技术实战:环境搭建栈溢出实战...
  4. 机器学习中用到的概率知识_机器学习中有关概率论知识的小结
  5. 三种单例模式的C++实现
  6. flink运行原理_Flink运行架构剖析
  7. 如何判断一个创业公司是否有发展潜力
  8. Keras 报错:An operation has `None` for gradient.
  9. 每天CookBook之Python-003
  10. VALSE学习(十四):自主学习
  11. Linux创建内核线程kthread_create的用法介绍
  12. 二叉树查找后继节点(即中序遍历情况下的这个节点的下一个) Python实现
  13. 复盘:windows ubuntu 双系统引导恢复、分区表恢复
  14. JUnit学习笔记6---用stub进行粗粒度测试
  15. 不同电脑进入bios按键汇总
  16. MySQL报错`ERROR: No query specified`
  17. 我国个人缴税计算实例
  18. Visual studio 2019使用Microsoft Speech SDK 5.1语音识别
  19. 华为OD机试真题2023(JAVA)
  20. 什么是同构与异构?及在不同背景下的理解

热门文章

  1. 严平稳随机过程,宽平稳随机过程,二阶矩过程之间的关系
  2. C++播放wav音乐和音效
  3. 趣味编程:有A,B,C,D,E五人,每人额头上都帖了一张黑或白的纸
  4. 字典攻击—Python
  5. 技术总监面试题(Java),看看你会多少?
  6. 大智慧公式系统:条件选股之K线形态选股
  7. 自动控制原理之控制系统的数学模型(类比神经网络学习数学模型)
  8. 从零实现深度学习框架——前馈网络语言模型
  9. 三个基本的布尔逻辑算符是_常用布尔逻辑运算符有哪些
  10. 【react学习笔记】为什么页面只展示空标签