代码:
需求:将数字金额转换为中文大写,最大支持到亿
number_dict = {"1":"一","2":"二","3":"三","4":"四","5":"五","6":"六","7":"七","8":"八","9":"九","0":"零"}
unit_dict = {1:'',2:'十',3:'百',4:'千',5:'万'}
zero_list = ['零万','零千','零百','零十','零零']
def main(number):
num_str = str(number)
print(num_str,end=':')
int_str = deal_int(num_str)
if num_str.__contains__("."):
int_str = int_str+deal_decimal(num_str)
print(int_str)
def deal_int(number:str):
# 处理整数
number = int(number.split('.')[0])
if number == 0:
return ''
return_str = ''
if number >=100000000:
current = deal_single_int((number - (number % 100000000)) // 100000000)
return_str = return_str + current + '亿'
number = number % 100000000
if number >=10000:
current = deal_single_int((number - (number%10000))//10000)
return_str = return_str+current+'万'
number = number % 10000
if number >=0:
return_str = return_str+deal_single_int(number)+'元'
if('零' in return_str):
return_str = deal_zero(return_str)
return return_str
def deal_single_int(number:int):
number_str = str(number)
lenth = len(number_str)
return_str = ''
for i in range(0, lenth):
upper_num = number_dict[number_str[i]]
unit = unit_dict.get(lenth - i)
return_str = return_str + upper_num + unit
if return_str.endswith("零"):
return_str = return_str[:-1]
return return_str
def deal_zero(number: str):
#处理返回值中的零
for item in zero_list:
if item in number:
number = number.replace(item,'零')
number = deal_multiple_zero(number)
if number.endswith("零"):
number = number[:-1]
return number
def deal_multiple_zero(number: str):
if '零零' in number:
number = number.replace('零零','零')
return deal_multiple_zero(number)
else:
return number
def deal_decimal(number:str):
# 处理小数
number = number.split('.')[1]
return_str = number_dict[number[0]]+'角'
if len(number)>1:
return_str = return_str + number_dict[number[1]] + '分'
return return_str
if __name__ == '__main__':
main(34009.6)
main(5009.6)
main(334009.6)
main(3331009.6)
main(33023009.7)
main(433303009.7)
main(5203323009.7)
main(0.73)
测试用例:
34009.6:三万四千零九元六角
5009.6:五千零九元六角
334009.6:三十三万四千零九元六角
3331009.6:三百三十三万一千零九元六角
33023009.7:三千三百零二万三千零九元七角
433303009.7:四亿三千三百三十万三千零九元七角
5203323009.7:五十二亿三百三十二万三千零九元七角