Python

def money2chinese(money_number):
    u"""
    .转换数字为大写货币格式
    @:param money_number: 金额(float, int, long, string 且小于15位)
    @:return chinese_str: 大写的金额字符串
    """
    format_word = [u"", u"", u"",
                   u"", u"", u"", u"",
                   u"", u"", u"", u"亿",
                   u"", u"", u"", u"",
                   u"", u"", u"", u""]

    format_num = [u"", u"", u"", u"", u"", u"", u"", u"", u"", u""]
    if isinstance(money_number, str):
        # - 如果是字符串,先尝试转换成float或int.
        try:
            if '.' in money_number:
                money_number = float(money_number)
            else:
                money_number = int(money_number)
        except:
            raise ValueError(u'不能识别的字符串:{0}'.format(money_number))
    if isinstance(money_number, float):
        real_numbers = []
        money_len = len(str(money_number))
        for i in range(money_len - 3, -3, -1):
            if money_number >= 10 ** i or i < 1:
                real_numbers.append(int(round(money_number / (10 ** i), 2) % 10))

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

    else:
        raise ValueError(u'非法传参')

    # 标记连续0次数,以删除万字,或适时插入零字
    zflag = 0
    start = len(real_numbers) - 3
    chinese_words = []

    # 使i对应实际位数,负数为角分
    for i in range(start, -3, -1):
        if real_numbers[start - i] or len(chinese_words) == 0:
            if zflag:
                chinese_words.append(format_num[0])
                zflag = 0
            chinese_words.append(format_num[real_numbers[start - i]])
            chinese_words.append(format_word[i + 2])

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

    if chinese_words[-1] not in (format_word[0], format_word[1]):
        # 最后两位非"角,分"则补"整"
        chinese_words.append("")

    return ''.join(chinese_words)


if __name__ == '__main__':
    print(money2chinese(float(100.33661)))
原文地址:https://www.cnblogs.com/pywjh/p/13558593.html