#coding:utf-8
import math
import types
import random
# cnList = [ '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' ]
cnList = [ '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' ]
#大权位
chnUnitSection = ["","万","亿","兆","京","垓"]
# chnUnitSection = ["","万","万亿","亿亿","万亿亿","亿亿亿"]
#小权位
chnUnitChar = ["","十","百","千"]
def NumberToChinese2(num):
#把数字转为字符串,同时防止非法输入
try:
typen = type(num)
if typen == types.IntType:
if num<0:
print '请输入正数'
return
num = str(num)
except:
print '输入必须是自然数'
return None
result = ''
z = 0
for i in range(0,len(num)):
# 把字符串转回数字,同时根据循环次数获得位数
#值
s = num[i]
s = int(s)
#位数
weishu = len(num)-i
if s:
#补零
if z:
result+=cnList[0]
#小权位[百十千]
x_w = ( weishu-1 )%4
#十位为1且为最高位:Ex:十五 十万 十三亿
if s==1 and x_w == 1 and i == 0:
result+=chnUnitChar[x_w]
else:
#汉字数字1-0
result+=cnList[s]
#权位
result+=chnUnitChar[x_w]
z = 0
else:
z+=1
#节位
if ( weishu-1 )%4==0 and z<4:
b_w = chnUnitSection[weishu/4]
result+=b_w
z = 0
return result
if __name__ == "__main__":
#测试使用随机数
r = random.randint(10000,10000000000)
print r
print NumberToChinese2(r)
以上,负数和小数添加比较简单没有太复杂的逻辑,若有错误欢迎指出