数字金额转换为大写金额python_python 数字转换为大写

本文介绍了一个Python类,用于将数字金额转换成汉字大写,常见于会计领域,例如将数字14524转换为'壹万肆仟伍佰贰拾肆元整'。该类包含多个方法,如`csplit`用于按亿、万、仟拆分数字,`cschange`用于转换每个分段的数字,最后`cwchange`将整数和小数部分转换并组合成完整的汉字大写金额。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在会计的时候,用到将数字转换为大写,也就是讲数字转为汉字

外汇出入金流程https://www.fx61.com/supportclass cnumber:

cdict = {}

gdict = {}

xdict = {}

def __init__(self):

self.cdict = {1: u'', 2: u'拾', 3: u'佰', 4: u'仟'}

self.xdict = {1: u'元', 2: u'万', 3: u'亿', 4: u'兆'} # 数字标识符

self.gdict = {0: u'零', 1: u'壹', 2: u'贰', 3: u'叁', 4: u'肆', 5: u'伍', 6: u'陆', 7: u'柒', 8: u'捌', 9: u'玖'}

def csplit(self, cdata): # 拆分函数,将整数字符串拆分成[亿,万,仟]的list

g = len(cdata) % 4

csdata = []

lx = len(cdata) - 1

if g > 0:

csdata.append(cdata[0:g])

k = g

while k <= lx:

csdata.append(cdata[k:k + 4])

k += 4

return csdata

def cschange(self, cki): # 对[亿,万,仟]的list中每个字符串分组进行大写化再合并

lenki = len(cki)

i = 0

lk = lenki

chk = u''

for i in range(lenki):

if int(cki[i]) == 0:

if i < lenki - 1:

if int(cki[i + 1]) != 0:

chk = chk + self.gdict[int(cki[i])]

else:

chk = chk + self.gdict[int(cki[i])] + self.cdict[lk]

lk -= 1

return chk

def cwchange(self, data):

cdata = str(data).split('.')

cki = cdata[0]

if len(cdata) == 1:

i = 0

chk = u''

cski = self.csplit(cki) # 分解字符数组[亿,万,仟]三组List:['0000','0000','0000']

ikl = len(cski) # 获取拆分后的List长度

# 大写合并

for i in range(ikl):

if self.cschange(cski[i]) == '': # 有可能一个字符串全是0的情况

chk = chk + self.cschange(cski[i]) # 此时不需要将数字标识符引入

else:

chk = chk + self.cschange(cski[i]) + self.xdict[ikl - i] # 合并:前字符串大写+当前字符串大写+标识符

chk = chk + u'整'

else:

i = 0

chk = u''

cski = self.csplit(cki) # 分解字符数组[亿,万,仟]三组List:['0000','0000','0000']

ikl = len(cski) # 获取拆分后的List长度

# 大写合并

for i in range(ikl):

if self.cschange(cski[i]) == '': # 有可能一个字符串全是0的情况

chk = chk + self.cschange(cski[i]) # 此时不需要将数字标识符引入

else:

chk = chk + self.cschange(cski[i]) + self.xdict[ikl - i] # 合并:前字符串大写+当前字符串大写+标识符

# 处理小数部分

ckj = cdata[1]

lenkj = len(ckj)

if lenkj == 1: # 若小数只有1位

if int(ckj[0]) == 0:

chk = chk + u'整'

else:

chk = chk + self.gdict[int(ckj[0])] + u'角整'

else: # 若小数有两位的四种情况

if int(ckj[0]) == 0 and int(ckj[1]) != 0:

chk = chk + u'零' + self.gdict[int(ckj[1])] + u'分'

elif int(ckj[0]) == 0 and int(ckj[1]) == 0:

chk = chk + u'整'

elif int(ckj[0]) != 0 and int(ckj[1]) != 0:

chk = chk + self.gdict[int(ckj[0])] + u'角' + self.gdict[int(ckj[1])] + u'分'

else:

chk = chk + self.gdict[int(ckj[0])] + u'角整'

return chk

if __name__ == '__main__':

pt = cnumber()

print(pt.cwchange('14524')) # 壹万肆仟伍佰贰拾肆元整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值