python中如何將貨幣數字轉化成漢字大寫金額


  近日,小爬的工作中,需要將貨幣數字金額(如:123234.56)轉化成漢字大寫的形式。網絡上看了一圈他人博客上的自定義函數,稍微都存有瑕疵,不符合漢語習慣:

1、比如,“六分”不能被轉化為“零角六分”,“.00"轉為了”零角零分“燈,着實有些拗口;

2、有的支持的位數不夠多,只定義了一萬以下的數字轉化方法,這樣的函數有它的局限性。

  小爬最后找到一個他人寫的、效果比較理想的js函數,稍加修改,然后用python的語法重新實現了,可以很完美地實現上述金額轉化為大寫的要求,支持的數大小可以超過一億,供參考!

def formatCurrency(currencyDigits): '''本函數旨在將數字化的金額(不含千分符)轉化為中文的大寫金額''' maximum_number=99999999999.99 cn_zero="" cn_one="" cn_two="" cn_three="" cn_four="" cn_five="" cn_six="" cn_seven="" cn_eight="" cn_nine="" cn_ten="" cn_hundred="" cn_thousand="" cn_ten_thousand="" cn_hundred_million="" cn_symbol="人民幣" cn_dollar="" cn_ten_cent="" cn_cent="" cn_integer="" integral=None decimal=None outputCharacters=None parts=None digits, radices, bigRadices, decimals=None,None,None,None zeroCount=None i, p, d=None,None,None quotient, modulus=None ,None currencyDigits=str(currencyDigits) if currencyDigits=="": return ""
    if float(currencyDigits)>maximum_number: print("轉換金額過大!") return "" parts = currencyDigits.split(".") if len(parts)>1: integral = parts[0] decimal = parts[1] decimal=decimal[0:2] if decimal=="0" or decimal=="00": decimal=""
    else: integral=parts[0] decimal="" digits=[cn_zero,cn_one,cn_two,cn_three,cn_four,cn_five,cn_six,cn_seven,cn_eight,cn_nine] radices=["",cn_ten,cn_hundred,cn_thousand] bigRadices=["",cn_ten_thousand,cn_hundred_million] decimals=[cn_ten_cent,cn_cent] outputCharacters = ""
    if int(integral)>0: zeroCount = 0 for i in range(len(integral)): p = len(integral) - i - 1 d = integral[i] quotient = int(p / 4) modulus = p % 4
            if d=="0": zeroCount+=1
            else: if zeroCount>0: outputCharacters += digits[0] zeroCount=0 outputCharacters = outputCharacters+ digits[int(d)] + radices[modulus] if modulus==0 and zeroCount < 4: outputCharacters =outputCharacters + bigRadices[quotient] outputCharacters += cn_dollar if decimal!="": jiao = decimal[0] if jiao=="": jiao="0"
        try: fen = decimal[1] except: fen="0"
        if fen=="": fen="0"
        if jiao=="0" and fen=="0": pass
        if jiao=="0" and fen !="0": outputCharacters = outputCharacters + cn_zero + digits[int(fen)] + decimals[1] if jiao !="0" and fen=="0": outputCharacters =outputCharacters + digits[int(jiao)] + decimals[0] if jiao!="0" and fen !="0": outputCharacters =outputCharacters + digits[int(jiao)] + decimals[0] outputCharacters =outputCharacters + digits[int(fen)] + decimals[1] if outputCharacters == "": outputCharacters = cn_zero + cn_dollar if decimal=="": outputCharacters = outputCharacters+ cn_integer outputCharacters = outputCharacters return outputCharacters

  小爬隨便輸入幾個較大的貨幣數字給這個函數,輸出的結果非常理想:

1 for currency in [23104214618.134,23423424.22,20012.35,23456.00,104213421.10,1000043.01]: 2     capital_currency=formatCurrency(currency) 3     print(str(currency)+":\t"+capital_currency)

結果如下:

23104214618.134: 貳佰叄拾壹億零肆佰貳拾壹萬肆仟陸佰壹拾捌元壹角叄分 23423424.22: 貳仟叄佰肆拾貳萬叄仟肆佰貳拾肆元貳角貳分 20012.35: 貳萬零壹拾貳元叄角伍分 23456.0: 貳萬叄仟肆佰伍拾陸元整 104213421.1: 壹億零肆佰貳拾壹萬叄仟肆佰貳拾壹元壹角 1000043.01:     壹佰萬零肆拾叄元零壹分

 如果您也有類似的需求,趕緊來試試這個好用的函數吧! 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM