当前位置 博文首页 > python将人民币转换大写的脚本代码

    python将人民币转换大写的脚本代码

    作者:admin 时间:2021-02-14 18:35

    复制代码 代码如下:

    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)

    js