数值转换为金额格式的函数

写了几个将数值转换为金额格式的函数,将数字转换为大写金额的函数是从网上转载的(不记得出处了)。

num2money( num )      用于将数字转换为带逗号分割的金额样式,保留两位小数
num2chn( num )            用于将数字转换为中文大写金额
getNum( string )            用于从字符串里提取数字
isNum( string )              用于判断string是否是由数字组成的字符串



import re

def num2money(num, decimals = 2, err = ''):
    u
''' 将数字格式化为金额样式,参数为数值,返回字符串

    num         要转换的数值
    decimals    保留小数位数
    err         出现错误时的返回值
    
'''
    
try:
        s 
= '' if num >= 0 else '-'
        y 
= r'%.' + str(decimals) + 'f'
        x 
= y % abs(num)
        decimal2 
= decimals + 1 if decimals else decimals
        
for i in range(len(x) - decimal2 - 3, 0, -3):
            x 
= '%s,%s' % (x[:i], x[i:])
        
return '%s%s' % (s, x)
    
except:
        
return err

def num2chn(nin = None):
    u
''' 将数字格式化为中文大写金额,参数必需大于等于零,返回unicode对象 '''

    cs 
= (u'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'',
        u
'', u'', u'', u'', u'', u'', u'', u'', u'', u'', u'亿', u'', u'', u'', u'')

    st 
= ''
    st1 
= ''
    s 
= '%0.2f' % (nin)
    sln 
= len(s)
    
if sln > 15:
        
return None
    fg 
= (nin < 1)
    
for i in range(0, sln - 3):
        ns 
= ord(s[sln - i - 4]) - ord('0')
        st 
= iif((ns == 0) and (fg or (i ==8 ) or (i == 4or (i == 0)), '', cs[ns]) 
            
+ iif((ns == 0) and ((i != 8and (i != 4and (i != 0) or fg and(i == 0)), '', cs[i + 13]) + st
        fg 
= (ns == 0)
    fg 
= False

    
for i in [1,2]:
        ns 
= ord(s[sln - i]) - ord('0')
        st1 
= iif((ns == 0) and ((i == 1or (i == 2and (fg or (nin < 1))), '', cs[ns]) 
            
+ iif((ns > 0), cs[i + 10], iif((i == 2or fg, '', u'')) + st1
        fg 
= (ns == 0)

    st.replace(u
'亿万', u'')
    
return iif(nin == 0, u'', st + st1)

def getNum(x):
    u
''' 从字符串中提取数字,参数为字符串,返回字符串

    如:getNum('123,456.2')返回123456.2
'''
    y 
= re.sub('[^d-.]*''', x)
    
if isNum(y):
        
return y
    
else:
        
return '0'

def iif(b, s1, s2):
    u
''' 相当于C语言中的"?:"操作符 '''
    
if b:
        
return s1
    
else:
        
return s2
    
def isNum(x):
    u
''' 判断是否为数值 '''
    
return __isSuited('^-?d+(,d{3,3})*.?d*$', str(x))

def __isSuited(regex, subject):
    
if re.match(regex, subject):
        
return 1
    
else:
        
return 0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值