阿拉伯数字转中文大写(金额)


输入:阿拉伯数字(float或int型)
输出:金额的中文大写(字符串)


    首先利用字符串的maketrans方法将阿拉伯数字与大写汉字进行映射,然后构造一个从个位到兆位的单位列表,对转换过后的数字列表进行反向遍历,依次与单位列表组合,就可以生成诸如(壹仟壹佰壹拾壹万)的字符串,之后对零项进行处理,这里我们将整数部分和小数部分分开处理,处理方式一样

1. 初始化参数

    def __init__(self, num):
        """
        :param num: 用户传入的数字
        初始化参数,包括:
        {
            check_num :int/float    用作检查输入的数字
            num:str    用作转换的阿拉伯数字字符串,排除`.00`的情况
            trans_tab:dict    字符映射转换表
            dec_label:list    小数部分的单位列表
            int_label:list    整数部分的单位列表
            int_string:str    整数部分构成的字符串
            dec_string:str    小数部分构成的字符串
        }
        """
        # 去除00的情况
        self.check_num = num
        self.num = str(num).rstrip('.0')
        self.trans_tab = str.maketrans('0123456789', '零壹贰叁肆伍陆柒捌玖')
        self.dec_label = ['角', '分']
        self.int_label = ['', '拾', '佰', '仟', '万', '拾', '佰', '千', '亿', '拾', '百', '千', '兆']
        self.int_string = ''
        self.dec_string = ''

2. 分离整数部分和小数部分

先调用字符串的translate将数字进行转换然后根据小数点进行分割

int_part, dec_part = self.num.translate(self.trans_tab).split('.')

3. 处理小数部分

    首先针对小数部分的长度分别处理,然后将之与小数的单位列表按照对应索引组合,组合成类似·壹角壹分·的类型,如果最小位到了分,则需要将零角替换为零,若只有角则无需处理

# 对小数部分进行处理
if len(dec_part) == 2:
    self.dec_string = ''.join([
        dec_part[i] + self.dec_label[i] for i in range(len(dec_part))
    ]).replace('零角', '零')

else:
    self.dec_string = ''.join([
        dec_part[i] + self.dec_label[i] for i in range(len(dec_part))
    ])

4. 处理整数部分

    这里注意,对整数部分的处理首先需要逆转整数数字的列表,从个位数字开始处理,这样能够有效的对数字的位数以及大小进行递增,从个十百千万依次递增(最大到兆),将整数部分与整数的单位列表所对应的的索引项相组合,若该数字为零则将组合后的结果也记为零,最后我们再将列表逆转回来并以字符串形式组合,将中间多余的零去除(若是一万零零零一则仅保留一个),最后对字符串尾部进行判断,如果结尾为零则表示最小位到十位,做补零操作,否则直接添加单位圆

# 处理整数部分
int_part = list(reversed(int_part))
int_list = list(reversed([
    int_part[i] + self.int_label[i] if int_part[i] != '零' else '零' for i in range(len(int_part))
]))
if int_list[-1] == '零':
    self.int_string = re.sub(r'零{2,}', '零', ''.join(int_list)).rstrip('零') + '圆零'
else:
    self.int_string = re.sub(r'零{2,}', '零', ''.join(int_list)).rstrip('零') + '圆'
print(self.int_string + self.dec_string)
  • 如果是浮点数,我们就需要组合两部分,若仅是纯整数,则只用处理整数部分,所以在初始化参数的时候定义了两个空字符串,这个时候就派上用场了
  • 此外,我们需要判断一下数据的准确性,是否越界,是否是纯整数等等
def data_checker(self):
    """
    判断用户传入的数据是否为数字类型且长度适中,最大仅支持到兆位,小数点后两位
    :return: 数据无误则返回True,否则False
    """
    if not isinstance(self.check_num, (int, float)):
        return False
    elif isinstance(self.check_num, int) and len(self.num) > 13:
        return False
    elif isinstance(self.check_num, float):
        int_part, dec_part = str(self.check_num).split('.')
        if len(int_part) > 13 or len(dec_part) > 2:
            return False
    return True
s
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,364评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,719评论 0 10
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,205评论 0 4
  • 刚刚过去的周末,过得不算太好,与我而言有点糟糕,因为大姨妈的定时造访,又加上腰背酸痛,心情实在低落。可是俩孩子依旧...
    Mandybryan阅读 590评论 0 1
  • 每一个参加过公考的人背后都有一段难忘的经历,对于我来说,我的公考之路走得并不顺畅。 一直以来都想将自己的这段经历写...
    跳舞的微尘阅读 5,314评论 82 177