Python 将中文大写数字转为阿拉伯数字
平时会碰到把中文大写的金额转为阿拉伯数字,比如叁仟伍佰陆拾玖元肆角需要转为3569.4,尝试编写函数如下:
def convert_cndigit(xxx):CN_NUM = {'〇' : 0, '一' : 1, '二' : 2, '三' : 3, '四' : 4, '五' : 5, '六' : 6, '七' : 7, '八' : 8, '九' : 9, '零' : 0,'壹' : 1, '贰' : 2, '叁' : 3, '肆' : 4, '伍' : 5, '陆' : 6, '柒' : 7, '捌' : 8, '玖' : 9, '貮' : 2, '两' : 2,}CN_UNIT = {'十' : 10,'拾' : 10,'百' : 100,'佰' : 100,'千' : 1000,'仟' : 1000,'万' : 10000,'萬' : 10000,'亿' : 100000000,'億' : 100000000,'兆' : 1000000000000,}regex = re.compile(r'[〇一二三四五六七八九零壹贰叁肆伍陆柒捌玖貮两十拾百佰千仟万萬亿億兆元角分]+')xxx = regex.search(xxx)if xxx:xxx = xxx.group()else:return Noneresult = 0result_list = []unit = 0control = 0for i, d in enumerate(xxx):if d in '零百佰千仟万萬亿億兆〇' and i == 0:return '大写数字格式有误'breakif d == '元':continueif d == '角':result -= CN_NUM[xxx[i - 1]]result += CN_NUM[xxx[i - 1]] * 0.1continueif d == '分':result -= CN_NUM[xxx[i - 1]]result += CN_NUM[xxx[i - 1]] * 0.01continueif d in CN_NUM:result += CN_NUM[d]
# 如果为单个数字直接赋值 elif d in CN_UNIT:if unit == 0:unit_1 = CN_UNIT[d]
# 这里的处理主要是考虑到类似于二十三亿五千万这种数if result == 0:result = CN_UNIT[d]else:result *= CN_UNIT[d]unit = CN_UNIT[d]result_1 = resultelif unit > CN_UNIT[d]:result -= CN_NUM[xxx[i - 1]]result += CN_NUM[xxx[i - 1]] * CN_UNIT[d]unit = CN_UNIT[d]elif unit <= CN_UNIT[d]:if (CN_UNIT[d] < unit_1) and (len(result_list) == control):result_list.append(result_1)result = (result - result_1) * CN_UNIT[d]control += 1else:result *= CN_UNIT[d]unit = CN_UNIT[d]if len(result_list) == control:unit_1 = unitresult_1 = result
# 处理二十三亿五千万和壹兆零六百二十三亿五千五百万五百这种数,及时截断else:return '出现了不能匹配的中文数字,请查验'break
# print('第{}步结果为{}单位为{}'.format(i + 1, result, unit))
# print(result_list)
# print(result)
# print(unit_1)return sum(result_list) + resulttest_ = [ '八','十一','一百二十三','一千二百零三','上交金额伍拾陆万柒仟零肆角','十万零三千六百零九','一百二十三万四千五百六十七','一千一百二十三万四千五百六十七','捌亿柒仟零肆拾陆万贰角捌分','一百零二亿五千零一万零一千零三十八','壹兆零六百二十三亿五千五百万五百零捌元叁角柒分']
for d in test_:result = convert_cndigit(d)print(f'{d}转换为阿拉伯数字为{result}')
上例测试输出为:
八转换为阿拉伯数字为8
十一转换为阿拉伯数字为11
一百二十三转换为阿拉伯数字为123
一千二百零三转换为阿拉伯数字为1203
上交金额伍拾陆万柒仟零肆角转换为阿拉伯数字为567000.4
十万零三千六百零九转换为阿拉伯数字为103609
一百二十三万四千五百六十七转换为阿拉伯数字为1234567
一千一百二十三万四千五百六十七转换为阿拉伯数字为11234567
捌亿柒仟零肆拾陆万贰角捌分转换为阿拉伯数字为870460000.28
一百零二亿五千零一万零一千零三十八转换为阿拉伯数字为10250011038
壹兆零六百二十三亿五千五百万五百零捌元叁角柒分转换为阿拉伯数字为1062355000508.37
Python 将中文大写数字转为阿拉伯数字相关推荐
- Python 中文(大写)数字转阿拉伯数字
中文转数字,小数的化考虑点字进一步封装即可. # constants for chinese_to_arabic CN_NUM = {'〇' : 0, '一' : 1, '二' : 2, '三' : ...
- 中文大写数字转换为阿拉伯数字(java)
1.引言 昨天面试了微软的暑期实习生,二面的时候面试官给出了这道题,起初拿到题目的时候感觉还挺简单的,想着直接用遍历加一个缓存应该就能搞定了,但是和面试官沟通了一会儿之后发现自己没考虑到的还有很多,最 ...
- 数字大写 php 代码,PHP 中文大写数字 转成 数字代码
echo ""; echo test('一十二亿七十一万五十一'); /* create by piaofen date: 2011-03-31 function: 中文大写数字转 ...
- 【工具封装】Python 实现将阿拉伯数字 === 转换成中文大写数字
一.序言: 工具封装第四弹,阿拉伯数字 ===> 转换成 ===> 中文大写数字,喜欢就赶紧收藏+点赞+关注吧 !!! ---- Nick.Peng 二.实现代码如下: #!/usr/ ...
- Python:阿拉伯数字转换为中文大写数字(金额的读数规则)
萌萌帮班里同学做了一个python的编程作业,正好回顾一下python基础知识,以下源码和思考过程,代码全部原创. IDE:pycharm python版本:python3.7 ''' 实验目的:在银 ...
- 阿拉伯数字转换为中文大写数字
这个功能使用场景不多,百度也能找到很多相关代码,只不过我找了几个看的不是很明白,为了锻炼自己的思维能力,所以就干脆自己写了一个,不仅分享代码,同时也分享一下我的思路 JS代码 let moneyCas ...
- 将数字0-9转为中文大写数字
//转为中文大写数字 var n = 230 var fraction = ["角", "分"]; var digit = ["零", &q ...
- 把阿拉伯数字翻译成中文大写数字
package com.zcw.zcwbook.demo15;/*** @program: zcwbook* @description: 把阿拉伯数字翻译成中文大写数字* @author: zhaoc ...
- js如何实现阿拉伯数字转中文大写数字
前言 最近有个需求,需要把阿拉伯数字转成中文大写数字,比如:100 转换成壹佰元.话不多说,撸起袖子就是干,做野! 规则 首先我们看看百度百科大写数字,对大写规则的描述: 中文大写数字到"元 ...
- 将阿拉伯数字转换为中文大写数字 —— pyhton实现
将阿拉伯数字转换为中文大写数字 -- pyhton实现 在银行的日常业务中,常常需要用到将阿拉伯数字转换为中文大写数字的 功能.这次实验将编写一个程序,将用户输入的阿拉伯数字代表的金额,转换为大写数字 ...
最新文章
- 世界围棋人机大战、顶峰对决第一盘:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,Google AlphaGo首战告捷
- MYSQL安装出现could not start the service mysql error:0处理
- 易语言 取dns服务器,易语言自动修改内网IP地址和DNS
- RPC 远程过程调用协议
- 基于随机森林的分类与回归
- JS学习笔记4-JavaScript 注释
- 【转】经典SQL语句大全
- fourinone分布式协调设计解析
- HDU1591 Encoded Love-letter【密码】
- web前端入门笔记:JSON
- [转]winform控件webbrowser和js脚本互调
- 开启线下2.0广告新趋势 详解LED透明屏
- 好文推荐(二):临界点-产品思维与设计思维(7)
- mobileconfig使用发布者证书动态签名
- 语音识别(ASR)论文优选:端到端ASR综述Recent Advances in End-to-End Automatic Speech Recognition
- 大话西游2同一个账号同一个服务器,大话西游2:一个服务器的火爆程度究竟是由什么决定...
- 呀!原来这就是前端监控系统
- php callable closure,详解php 使用Callable Closure强制指定回调类型
- 深入剖析Flannel-启动流程
- c#连mysql 连接字符串