將數字轉換爲人民幣大寫。 python
例如: 12058304.368元,轉換爲:壹仟貳佰零伍萬捌仟叄佰零肆元叄角陸分 app
注:13位數字的金額已經不小了,萬億 spa
def num2chn(num): """ 將數字(數字字符串)轉換爲人民幣大寫 :param num: int、float或者str :return: 返回處理結果,發生錯誤返回None """ chr = ('零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖') bit = ('分', '角', '元', '拾', '佰', '仟', '萬', '拾', '佰', '仟', '億', '拾', '佰', '仟', '萬') # 例 324562.003 # 轉換爲 00265423 try: num = float(num) # 將數字反序排列,從右至左依次 num_str = ('%0.2f' % num).replace('.', '')[::-1] except ValueError: return None n = len(num_str) if n >= 15: return None result = [] for i in range(0, n): # 非圓、萬、億, if num_str[i] == "0" and i != 2 and i != 6 and i != 10: s = chr[0] elif num_str[i] == "0" and (i == 2 or i == 6 or i == 10): s = bit[i] else: s = bit[i] + chr[int(num_str[i])] result.append(s) # 從左值右重排字符串 rst = "".join(result)[::-1] # 去零,中間多個零合併爲一個,尾部零全去, "零" == chr[0] # r = r"[零]+" r = "[" + chr[0] + "]+" rst = re.compile(r).sub(chr[0], rst).rstrip(chr[0]) # 去零元、零萬、零億 for i in [2, 6, 10]: rst = rst.replace(chr[0]+bit[i], bit[i]) if rst[-1] == bit[2]: rst += "整" print('%0.2f' % num) print(rst) return rst