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

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

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  ==   4 or  (i  ==  0)),  '' , cs[ns]) 
            
+  iif((ns  ==  0)  and  ((i  !=   8 and  (i  !=   4 and  (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  ==   1 or  (i  ==   2 and  (fg  or  (nin  <   1 ))),  '' , cs[ns]) 
            
+  iif((ns  >  0), cs[i  +   10 ], iif((i  ==   2 or  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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值