中文数字转阿拉伯数字
中文数字转阿拉伯数字
第一步:分析
对于中文数字,它的大小范围是不固定的但是它所包含的字符是一定的.
一个中文数字字符串的字符总归是在 零,一,二,三,四,五,六,七,八,九,十,百,千,万,亿.这里面选几个组成的.
因此我们先新建一个ENUM来表示这些数并将其与对应的阿拉伯数字对应
enum ChineseNumber {YI('一', 1),ER('二', 2),SAN('三', 3),SI('四', 4),WU('五', 5),LIU('六', 6),QI('七', 7),BA('八', 8),JIU('九', 9),LING('零', 0),SHI('十', 10),BAI('百', 100),QIAN('千', 1000),WAN('万', 10000);private char cValue;private int aValue;ChineseNumber(char cValue, int aValue) {this.cValue = cValue;this.aValue = aValue;}// 该enum中的 中文数字转成阿拉伯数字 一->1 十 -> 10 万->10000...private static int chinese2arabic(char cValue) {for (ChineseNumber c : values()) {if (c.cValue == cValue) {return c.aValue;}}return 0;}// 该enum中的 阿拉伯数字转成中文数字private static char arabic2chinese(int aValue) {for (ChineseNumber c : values()) {if (c.aValue == aValue) {return c.cValue;}}return ' ';// 或者抛出异常}// 判断是否是单位 十 百 千... 是的话返回trueprivate static boolean isUnit(char c){return chinese2arabic(c) >= 10;}
}
这样我们就能把中文数字和对应的阿拉伯数字对应起来了,并且可以依靠它的方法获得中文数字对应的阿拉伯数字.
第二步:找规律
首先咋们先把数字从小到大进行分析
零到九
零到九的话直接判断中文然后输出对应的数字就行
十到九十九
十到九十九里出现了一个"十",这个相当于数的单位(类似于"个",“条”).
“百”,“千”…都是单位;
中文不像阿拉伯数字是依靠数字的位置表示数位这个概念的,而是靠单位来表示数位的.
如果和阿拉伯数字一样的话那么91用中文表示就是"九一",实际上91用中文表示是"九十一",多了一个单位十.
这里有个特殊的情况,在表示十几的时候我们不会把最前面的一带上,比如:我们一般不会说 “一十” 而是直接说 “十”(不会是我个人的习惯吧…(✪ω✪)).
然后就是二十几,三十几,这些都是正常的…
因此我们可以这样算:
十 -> (10 ) -> 10
十一 -> (10 + 1 ) -> 11
二十 -> (2*10 ) -> 20
二十一 -> (2*10+1) -> 21
…
九十九 -> (9*10 +9 ) -> 99
九十九 +
如果在100以上的话会有两个单位"十",“百”;同时可能会多出一种情况,就是一百零一这种;
一百零一 ->(1*100 + 0+ 1) ->101
中间的 零 对结果并不会造成影响,所以可以不用在意.
第三步:分析规律,寻找解决方案
根据上面的规律,我们可以想一下大概的处理过程.
首先,中文作为字符串我们把它所包含的字符从右往左依次取出.比如 “二十一” 我们可以依次获得 “一”,“十”,“二”.
然后,通过转换我们获得对应的阿拉伯数字1,10,2;其中十是二的单位;
最后,我们需要将数字乘上他们的单位然后相加即可.
第四步:敲代码
int unit = 1; // 当前数位int total = 0; // 结果int currentArabic; // 当前中文数字代表的阿拉伯数字char currentChinese; // 当前中文数字char[] chars = chineseNumber.toCharArray();for (int i = 0; i < chars.length; i++) {currentChinese = chars[chars.length - i - 1];// 从后往前取currentArabic = ChineseNumber.chinese2arabic(currentChinese); // 将中文转换成阿拉伯数字// 首先判断当前中文是不是单位数如果是的话保存当前单位再读取 否则就将当前数乘上当前单位在相加// 然后再将当前单位重置为1if (ChineseNumber.isUnit(currentChinese)) {if (unit == 1) {unit = currentArabic;} else {// 如果是 一千万这种出现连续单位 unit 要相乘unit = currentArabic * unit;}} else {total += currentArabic * unit;unit = 1;}}// 如果单位不为1 说明最左面的只有单位比如 十一,要加上.// (如果不是10的话,也可以抛出一个异常比如 "万八千",会被解析成18000,其实是错的)if (unit != 1) {total += unit;}return total;
中文数字转阿拉伯数字相关推荐
- python数字转中文字符_Python实现中文数字转换为阿拉伯数字的方法示例
本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法.分享给大家供大家参考,具体如下: 一.需求 今天写了三千二百行代码. 今天写了3200行代码. 两行意思相同,只是表达方式不太能够,统一掉 ...
- python数字转换_Python实现中文数字转换为阿拉伯数字的方法示例
本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法.分享给大家供大家参考,具体如下: 一.需求 今天写了三千二百行代码. 今天写了3200行代码. 两行意思相同,只是表达方式不太能够,统一掉 ...
- 中文数字与阿拉伯数字转换(Python)
cn2an 是一个快速转化 中文数字 和 阿拉伯数字 的工具包 相关链接 cn2an工具包Github地址 在线测试平台 install git clone https://github.com/Ai ...
- android数字转汉字,【原创】最精简的中文数字和阿拉伯数字互相转换函数
public class ChineseNumUtils { /** * 中文数字转阿拉伯数字 * (长度不能超过long最大值) * * @param chNum 中文数字 * @return 阿拉 ...
- java中文数字与阿拉伯数字相互转换
最近有一个业务需要用到中文数字与阿拉伯数字相互转换,废话不多说直接上代码. 中文数字/阿拉伯数字互转第一次完善:https://blog.csdn.net/qq_26896085/article/de ...
- c# 中文数字转阿拉伯数字
最近迷上了看网络小说,手机上的小说阅读器全都是收费的,所以决定下载下载再导入到手机上,可是能下载到的现成的TXT格式小说全都被打了广告,仔细看的时候像一些"首"."发&q ...
- 阿拉伯数字中文oracle,【oracle】中文数字转阿拉伯数字
简体中文数字转阿拉伯数字,分为两个存储过程,一个是处理小数位的,一个是处理整数位的,加入部分检错处理,没有穷举所有非法输入,支持数据大小为:number型支持到多少就支持到多少,这是个写得比较好的转换 ...
- cn2.php中文,Python使用cn2an实现中文数字与阿拉伯数字的相互转换
工作中经常遇到阿拉伯数字转换称为中文数字或者大写金额,在网上搜了下,cn2an口碑较好,遂进行了一番学习. 安装 pip install cn2an 依赖库为setuptools.PyYAML 查看版 ...
- 使用cn2an实现中文数字与阿拉伯数字的相互转换
工作中经常遇到阿拉伯数字转换称为中文数字或者大写金额,在网上搜了下,cn2an口碑较好,遂进行了一番学习. 安装 pip install cn2an 依赖库为setuptools.PyYAML 查看版 ...
- Excel如何将中文数字转为阿拉伯数字
如下图,A列数据是中文数字,现在想要将这些中文数字转为阿拉伯数字. 将A列数据复制到B列中 选中B列所有数据单元格 点击下图选项(Excel工具箱,具体的下载安装方法百度即可,本文不做详细解说) 选择 ...
最新文章
- PAT(甲级)2018年冬季考试 7-4 Heap Paths(非递归与递归解法)
- spark 中的RDD编程:基于Java api
- C++ 常用算数生成算法
- 10.15 lzxkj
- 设计模式学习笔记一——开篇
- fastJson toJSONString注意点
- python中span函数,如何用python中BeautifulSoup提取无类名的span内文本
- NERO9注册机使用
- 三星k3梅林没有软件中心_斐讯K3梅林软件中心版刷机包 修正WAN口 修正2.4G 自动息屏 完美混血...
- 电脑连接android智能电视的一种方法
- Ubuntu通过清华镜像源下载软件
- 人工智能-生物神经网络
- c 语言rand()生成随机数
- Python 环境及开发工具 IDLE 安装教程
- 在计算机上知道手机密码,不知道密码查手机通话记录:傻瓜式教程
- 初学单片机:Proteus介绍、Proteus与Keil联调(Windows10环境下)
- 全球围剿下,苹果还能挺多久?
- java之21点游戏(只包含一个玩家和一个庄家,是否抓牌,没有黑杰克)
- 硬件学习(三)电阻作用
- Vs2008编译vtk5.10详细教程