# -*- coding: gbk -*- #------------------------------------------------------------------------------- # Name: rmb.py # Purpose: 人名币小写转大写,整数部分处理到万亿,小数部分只处理2位 # Author: pushad # # Created: 28-11-2009 # Copyright: (c) baby 2009 # Licence: <your licence> #------------------------------------------------------------------------------- #!/usr/bin/env python Number = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"] Other = ["元","角","分","整"] zi = ["拾","佰","千","万","亿"] dw = ["元","万","亿"] def main(inum): rmb = int(inum) xs = round(inum - int(inum),2) rmbc = [] #处理小数部分只处理到2位小数,不进行四舍五入 xs = int(xs * 100) if xs != 0: if xs == 10: rmbc.append(Number[xs/10] + Other[1]) elif xs < 10: rmbc.append(Number[xs] + Other[2]) elif xs > 10: if xs%10: rmbc.append(Number[xs%10] + Other[2]) rmbc.append(Number[xs/10] + Other[1]) #无小数末尾添加‘整’,有小数添加小数描述 if xs > 0: rmbc.append(Number[0]) else: rmbc.append(Other[3]) #处理整数部分 #数字位数 bit = 1 #零标志位 用以添加 '0' zf = 0 #万位标志 bitw = 0 #亿位标志 bity = 0 while rmb: if bit % 5 == 0: bitw = 0 if bit % 9 == 0: bity = 0 if rmb%10: #亿位处理 大于9位,遇到第一个非0数字添加'亿' if bit >= 9 and bity == 0: bity = 1 rmbc.append(dw[2]) #万处位理万 大于5位,遇到第一个非0数字添加'万',(9到12位之间单位为'亿') if bit >= 5 and (not 9 <= bit <= 12) and bitw == 0: bitw = 1 rmbc.append(dw[1]) if (bit - 1) % 4 == 0:#个位 rmbc.append(Number[rmb%10]) elif (bit - 2) % 4 == 0:#十位 rmbc.append(Number[rmb%10] + zi[0]) elif (bit - 3) % 4 == 0:#百位 rmbc.append(Number[rmb%10] + zi[1]) elif (bit - 4) % 4 == 0:#千位 rmbc.append(Number[rmb%10] + zi[2]) zf = 0 else: #当前位为0,如果上一位不为0,则添加'零' if bit != 1 and zf == 0: rmbc.append(Number[0]) zf = 1 #从低位开始取数 rmb = rmb / 10 bit = bit + 1 #处理后翻转列表 rmbc.reverse() return rmbc if __name__ == '__main__': #100,0000,0000 test = [10,100,1000,10000,1010] test2 = [10001000.1,10010000.01,10200000,10200200,10000001] test3 = [10000,100000,110000,1000000,1010000,1100000,1110000,10000000,10010000,10100000,11000000] test4 = [10000,100000,110000,1000000,1010000,1100000,1110000,23123000360234] test5 = [10000100010000.12,11111111.10,1000000000,10000000000,10100000000,23123000360234,23000000000000,1000100000000] for num in test2: rmbc = main(num) str = '' for i in rmbc: str = str + i print num,":",str.decode('gbk')