• Python转换数字到中文大写格式
2020-11-20 23:41:44

今天有人在群里问到Python怎么把小写数字转换成中文的大写字符，觉得这个问题很有趣，于是想了一下，就开始写代码了。

以下是代码，感觉不足的地方就是如果是1001元，那么就会转换成 壹仟零佰零拾壹圆，多了个零。这个代码python2和python3都可以运行。

# -*- coding:utf-8 -*-

# date: 2018-02-28 11:48

def digital_to_chinese(digital):

str_digital = str(digital)

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

chinese2 = ['拾', '佰', '仟', '万', '厘', '分', '角']

jiao = ''

bs = str_digital.split('.')

yuan = bs[0]

if len(bs) > 1:

jiao = bs[1]

r_yuan = [i for i in reversed(yuan)]

count = 0

for i in range(len(yuan)):

if i == 0:

r_yuan[i] += '圆'

continue

r_yuan[i] += chinese2[count]

count += 1

if count == 4:

count = 0

chinese2[3] = '亿'

s_jiao = [i for i in jiao][:3] # 去掉小于厘之后的

j_count = -1

for i in range(len(s_jiao)):

s_jiao[i] += chinese2[j_count]

j_count -= 1

last = [i for i in reversed(r_yuan)] + s_jiao

last_str = ''.join(last)

print(str_digital)

print(last_str)

last_str = last_str.replace('0百', '0').replace('0十', '0').replace('000', '0').replace('00', '0').replace('0圆', '圆')

for i in range(len(last_str)):

digital = last_str[i]

if digital in chinese:

last_str = last_str.replace(digital, chinese[digital])

print(last_str)

return last_str

if __name__ == '__main__':

digital_to_chinese(123456789.456)

这是输出

123456789.456

1亿2仟3佰4拾5万6仟7佰8拾9圆4角5分6厘

壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖圆肆角伍分陆厘

更多相关内容
• 在会计的时候，用到将数字转换为大写，也就是讲数字转为汉字class cnumber:cdict = {}gdict = {}xdict = {}def __init__(self):self.cdict = {1: u'', 2: u'拾', 3: u'佰', 4: u'仟'}self.xdict = {1: u'元', 2: u'...

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

class 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')) # 壹万肆仟伍佰贰拾肆元整

展开全文
• 将金额数字转化为大写，格式规范标准。① 当没有零头时自动加xxxx元整 ② 小数能够精确到角、分、厘 ③ 能够处理1亿一下金额数字 ④ 使用方法：numToBig(金额)，返回大写字符串
• 将阿拉伯数字转换为大写数字，主要解决小数点问题，
• 关键在于如何解决10100中0的描述，通过判断上一位的值是否‘’零‘’，具体看代码： list1 = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾'] list2 = ['圆', '拾', '佰', '仟', '萬'] money...

关键在于如何解决10100中0的描述，通过判断上一位的值是否为‘’零‘’，具体看代码：

list1 = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾']
list2 = ['圆', '拾', '佰', '仟', '萬']
money = input("请输入金额:")
money2 = ''
for i in range(0, len(money)):
if int(money[i]) != 0:
money2 += list1[int(money[i])]+list2[len(money)-i-1]
else:
if money2[-1] != "零":
money2 += "零"
if money2[-1] == "零":
print(money2[0:len(money2)-1]+"圆整")
else:
print(money2+"整")

展开全文
• 本文实例大家分享了python实现人民币大写转换的具体代码，供大家参考，具体内容如下 #!/usr/bin/python # -*- coding:utf-8 -*- # ********* 转换方法介绍 ********* # 将需要转换数字从右向左，每4位分成一个...
• Python将阿拉伯数字转化中文大写，关键点在于中间空多个0的问题。这种情况下，采用拆分法则，将一个大数字，先拆分成整数部分和小数部分，再对整数部分按照仟、万、亿、兆分位拆分为四个字符串组成的List，每个...

Python将阿拉伯数字转化为中文大写，关键点在于中间空多个0的问题。

这种情况下，采用拆分法则，将一个大数字，先拆分成整数部分和小数部分，再对整数部分按照仟、万、亿、兆分位拆分为四个字符串组成的List，每个字符串最多4个字符，然后对每个分位的字符串用大写函数转换成大写，最后合并。如此的操作方法，缩减了问题，处理起来就容易多了。

代码：

复制代码 代码示例:

#!/usr/bin/env python

#edit: www.51itstudy.com

#

# -*- coding: utf-8 -*-

'''

#算法说明：要求字符串输入，现将字符串差费为整数部分和小数部分生成list[整数部分,小数部分]

#将整数部分拆分为：[亿，万，仟]三组字符串组成的List:['0000','0000','0000'](根据实际输入生成阶梯List)

#例如：600190000010.70整数部分拆分为：['600','1900','0010']

#然后对list中每个字符串分组进行大写化再合并

#最后处理小数部分的大写化

'''

class 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

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('123410505632.09').encode('utf-8')

展开全文
• 利用Python将阿拉伯数字转化中文大写，其实最麻烦的地方就是中间空多个0的问题，这种情况下，采用拆分法则，将一个大数字，先拆分成整数部分和小数部分，再对整数部分按照仟、万、亿、兆分位拆分为四个字符串组成...
• 本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法。分享给大家供大家参考，具体如下： 一、需求 今天写了三千二百行代码。 今天写了3200行代码。 两行意思相同，只是表达方式不太能够，统一掉。 二、原理 ...
• 数字转换成中文大写，例如：1->一 ，25->二十五，49->四十九 Parameters ---------- intnumber : TYPE DESCRIPTION. Returns ------- TYPE DESCRIPTION. ''' numberList = ['零','一','二.
• 题目 python练习的一个小实验, 题目如下图: ...3. 整数部分可以分割以 4 位数字为一组的列表来进行转换处理，这样便于进行 （兆，亿，万，圆）。的单位处理 4. 首先将分割的 4 位数字一组的数据进行转化处理，便...
• 主要介绍了Python实现把数字转换成中文,一般用于数字金额中文大写金额,即将阿拉伯数字转换为大写的中文,需要的朋友可以参考下
• 很简单。python本身有个抽象语法树库专门解析源码。加上astor库导出到文件就可以。...把它们都转换为ascii十进制来判断,a最小97，z最大122。例如:raw_str="test_1"str_to_ascii=[chr(ord(single_st...
• 在会计的时候，用到将数字转换为大写，也就是讲数字转为汉字 class cnumber: cdict = {} gdict = {} xdict = {} def __init__(self): self.cdict = {1: u'', 2: u'拾', 3: u'佰', 4: u'仟'} self.xdict = {1:...
• 大写数字转换为阿拉伯数字
• /usr/bin/python #-*- encoding: utf-8 -*- import types class NotIntegerError(Exception): pass class OutOfRangeError(Exception): pass _MAPPING = (u’零’, u’一’, u’二’, u’三’, u’四’, u’五’, u...
• python 转换数字为中文的大写 python 转换为中文的大写数字，比较简单，有需要的同学可以拿去使用，没做角和分 可以自己修改 下面代码 #-*-coding:utf-8 -*- import logging import urllib2 # urllib2.request_...
• 壹仟万壹仟贰佰叁拾肆圆 壹仟万圆 壹仟万零肆圆 壹仟万零叁拾圆 壹仟万零贰佰圆 壹仟万壹仟圆 壹仟零伍万圆 壹佰贰拾亿零壹万零壹圆 壹仟肆佰零玖圆伍角 ———————————————— 版权声明：本文CSDN博主...
• 实现代码一 ...import re from decimal import Decimal, ROUND_HALF_UP ZH_HANS_MAP = dict(zip(range(10), "零壹贰叁肆伍陆柒捌玖")) def verbose_price(cost): cost = Decimal(cost).quantize(Decimal('0.00'), ...
• def digital_to_chinese(digital):str_digital = str(digital)chinese = {'1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖', '0': '零'}chinese2 = ['拾', '佰'...
• 本人找了很多文章，对于数字转中文大写的都没有很好的支持，尤其是单位不同的时候，于是找了一组代码稍加修改，运行流畅，输出准确。放上来算是给社区一点小贡献。转载记得加上这个链接哦。有问题欢迎留言和私信。有...
• 问题描述：输入一串数字金额，然后打印出它的中文大写。 利用列表下标进行转换。 list1 = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾'] list2 = ['圆', '拾', '佰', '仟', '萬'] money ...
• Python 转换金额大写为数字小写 def toInt(value): isum = 0 nums = {'零': 0, '壹': 1, '贰':2, '叁': 3, '肆': 4, '伍': 5, '陆': 6, '柒': 7, '捌': 8, '玖':9} dw = {'拾': 3, '元': 2, '佰': 4, '仟': 5, '...
• 一、功能描述 实现类似 Excel 中的列序号功能。... factor - 1 : 商为有效值时起始数 1 而余数是 0 return modChar 三、结果   转载于:https://www.cnblogs.com/Lieber/p/7306002.html

...