python將人民幣轉換大寫的指令碼代碼

來源:互聯網
上載者:User

複製代碼 代碼如下:def Num2MoneyFormat( change_number ):
"""
.轉換數字為大寫貨幣格式( format_word.__len__() - 3 + 2位小數 )
change_number 支援 float, int, long, string
"""
format_word = ["分", "角", "元",
"拾","百","千","萬",
"拾","百","千","億",
"拾","百","千","萬",
"拾","百","千","兆"]

format_num = ["零","壹","貳","三","肆","伍","陸","柒","捌","玖"]
if type( change_number ) == str:
# - 如果是字串,先嘗試轉換成float或int.
if '.' in change_number:
try: change_number = float( change_number )
except: raise ValueError, '%s can\'t change'%change_number
else:
try: change_number = int( change_number )
except: raise ValueError, '%s can\'t change'%change_number

if type( change_number ) == float:
real_numbers = []
for i in range( len( format_word ) - 3, -3, -1 ):
if change_number >= 10 ** i or i < 1:
real_numbers.append( int( round( change_number/( 10**i ), 2)%10 ) )

elif isinstance( change_number, (int, long) ):
real_numbers = [ int( i ) for i in str( change_number ) + '00' ]

else:
raise ValueError, '%s can\'t change'%change_number

zflag = 0 #標記連續0次數,以刪除萬字,或適時插入零字
start = len(real_numbers) - 3
change_words = []
for i in range(start, -3, -1): #使i對應實際位元,負數為角分
if 0 <> real_numbers[start-i] or len(change_words) == 0:
if zflag:
change_words.append(format_num[0])
zflag = 0
change_words.append( format_num[ real_numbers[ start - i ] ] )
change_words.append(format_word[i+2])

elif 0 == i or (0 == i%4 and zflag < 3): #控制 萬/元
change_words.append(format_word[i+2])
zflag = 0
else:
zflag += 1

if change_words[-1] not in ( format_word[0], format_word[1]):
# - 最後兩位非"角,分"則補"整"
change_words.append("整")

return ''.join(change_words)

Python 把金額小寫轉換成大寫2

功能將小於十萬億元的小寫金額轉換為大寫

複製代碼 代碼如下:  def IIf( b, s1, s2):
  if b:
    return s1
  else:
    return s2
def num2chn(nin=None):
    cs =
('零','壹','貳','三','肆','伍','陸','柒','捌','玖','◇','分','角','圓','拾','佰','仟',
'萬','拾','佰','仟','億','拾','佰','仟','萬')
    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, '', '整'))
       + st1
        fg = (ns==0)
    st.replace('億萬','萬')
    return IIf( nin==0, '零', st + st1)
if __name__ == '__main__':
  num = 12340.1
  print num
  print num2chn(num)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.