背景
銀行在打印票據(jù)的時候,常常需要將阿拉伯數(shù)字表示的人民幣金額轉換為大寫表示,現(xiàn)在請你來完成這樣一個程序。
在中文大寫方式中,0到10以及100、1000、10000被依次表示為: 零 壹 貳 叁 肆 伍 陸 柒 捌 玖 拾 佰 仟 萬
以下的例子示范了阿拉伯數(shù)字到人民幣大寫的轉換規(guī)則:
1 壹圓
11 壹拾壹圓
111 壹佰壹拾壹圓
101 壹佰零壹圓
給一個數(shù)字,不超過兩位小數(shù),其中整數(shù)部分(a<100000000)。
代碼部分
def money_en_to_cn():
'''
此方法對各種數(shù)據(jù)驗證都通過
:return:
'''
# money_en = 12345678
# money_en = 10100010
# money_en = 10101010
# money_en = 10100110
# money_en = 10100101
money_en = 1010101.20
num_list = [{'0': '零', '1': '壹', '2': '貳', '3': '叁', '4': '肆', '5': '伍', '6': '陸', '7': '柒', '8': '捌', '9': '玖'},
'拾', '佰', '仟', '萬']
decimal_list = ['角','分']
def func(b):
ns = ''
for x in range(1, len(b)):
num = num_list[0][b[x]]
word = num + (num_list[x] if b[x]!='0' else '')
ns = word + ns
return ns + (num_list[0][b[0]] if b[0] != '0' else '')
NUM_LINE = 10000
money_cn = ''
if money_en == 0:
return '零圓'
aa = copy.copy(int(money_en))
unit = '圓'
while aa % NUM_LINE:
b = str(aa % NUM_LINE)[::-1]
if len(str(aa)) > 4 and len(str(b)) != 4:
b = b + '0'
money_cn = func(b) + unit + money_cn
aa = aa // NUM_LINE
unit = '萬' if aa else '圓'
if isinstance(money_en,float):
ab = round(money_en,2)
ab = str(ab).split('.')[1]
for x in range(0, len(ab)):
num = num_list[0][ab[x]]
word = num + (decimal_list[x] if ab[x] != '0' else '')
money_cn += word
return money_cn
輸出結果為:
壹佰零壹萬零壹佰零壹圓貳角
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
