1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 关于使用python简单将账本金额转化为大写中文数字

关于使用python简单将账本金额转化为大写中文数字

时间:2019-12-31 11:59:19

相关推荐

关于使用python简单将账本金额转化为大写中文数字

python简单将账本金额(阿拉伯数字)转为大写中文数字金额

缘由

实习的地方要求将账本金额转换为中文大写,我又不想一个个手打,网上能直接找到的也只支持整数转换,就根据自己的需要写了一小段,置此以作记录

解决的问题

考虑了多个0在中间、末尾、开头不同位置考虑了小数点后两位的情况自动添加单位

这样其实用来转换一下账本的金额怎么也够用了。。

def get_sdigit(num, p):return int(num / pow(10, p)) % 10def get_max_pos(number):return len(str(int(number))) + len(str(int(number))) % 4 + 1class CNumber:cdict = {}gdict = {}xdict = {}def __init__(self):self.cdict = {0: u'', 1: u'拾', 2: u'佰', 3: u'仟'}self.xdict = {0: '分', 1: '角', 2: u'元', 3: u'万', 4: u'亿', 5: u'兆'} # 数字标识符self.gdict = {0: u'零', 1: u'壹', 2: u'贰', 3: u'叁', 4: u'肆', 5: u'伍', 6: u'陆', 7: u'柒', 8: u'捌', 9: u'玖'}def tsf(self, number):cdata = []cdata.append(get_sdigit(number, -2))cdata.append(get_sdigit(number, -1))mark = 0for i in range(0, get_max_pos(number)):if mark == 0:temp = []temp.append(get_sdigit(number, i))mark += 1elif mark == 1:temp.append(get_sdigit(number, i))mark += 1elif mark == 2:temp.append(get_sdigit(number, i))mark += 1elif mark == 3:temp.append(get_sdigit(number, i))mark = 0cdata.append(temp)return self.to_String(cdata)def to_String(self, nList):S = '' # 初始化用的S,防止小数部分为空# 下面两个if是用来加上小数部分的if nList[0] != 0:S = self.gdict.get(nList[0]) + self.xdict.get(0)if nList[1] != 0:S = self.gdict.get(nList[1]) + self.xdict.get(1) + Sif nList[0] == 0 and nList[1] == 0:S = '整' + Sfor i in range(2, len(nList)):mark = 0for num in nList[i]:if num == 0:mark += 1if mark != 4 or i == 2:S = self.xdict.get(i) + S # 加上单位(元万亿。。。)for j in range(0, 4):if i != len(nList) - 1:if nList[i][j] != 0:S = self.gdict.get(nList[i][j]) + self.cdict.get(j) + S# 逻辑判断,每四个单位哪些情况会出现零# 基本逻辑为,同阶内,小于自己的一定存在非0,而自己的上一位一定非0elif (j == 1 and nList[i][0] != 0 and nList[i][2] != 0) \or (j == 2 and (nList[i][1] != 0 or nList[i][0] != 0) and nList[i][3] != 0)\or (j == 3 and (nList[i][2] != 0 or nList[i][1] != 0 or nList[i][0] != 0)):S = self.gdict.get(nList[i][j]) + Selse:if nList[i][j] != 0:S = self.gdict.get(nList[i][j]) + self.cdict.get(j) + Selif j == 1 and nList[i][0] != 0 and nList[i][2] != 0:S = self.gdict.get(nList[i][j]) + Sreturn S

这里是简单测试用的

if __name__ == '__main__':test = CNumber()print(test.tsf(1100000000))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。