中文数字转阿拉伯数字

第一步:分析

对于中文数字,它的大小范围是不固定的但是它所包含的字符是一定的.
一个中文数字字符串的字符总归是在 零,一,二,三,四,五,六,七,八,九,十,百,千,万,亿.这里面选几个组成的.

因此我们先新建一个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;

中文数字转阿拉伯数字相关推荐

  1. python数字转中文字符_Python实现中文数字转换为阿拉伯数字的方法示例

    本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法.分享给大家供大家参考,具体如下: 一.需求 今天写了三千二百行代码. 今天写了3200行代码. 两行意思相同,只是表达方式不太能够,统一掉 ...

  2. python数字转换_Python实现中文数字转换为阿拉伯数字的方法示例

    本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法.分享给大家供大家参考,具体如下: 一.需求 今天写了三千二百行代码. 今天写了3200行代码. 两行意思相同,只是表达方式不太能够,统一掉 ...

  3. 中文数字与阿拉伯数字转换(Python)

    cn2an 是一个快速转化 中文数字 和 阿拉伯数字 的工具包 相关链接 cn2an工具包Github地址 在线测试平台 install git clone https://github.com/Ai ...

  4. android数字转汉字,【原创】最精简的中文数字和阿拉伯数字互相转换函数

    public class ChineseNumUtils { /** * 中文数字转阿拉伯数字 * (长度不能超过long最大值) * * @param chNum 中文数字 * @return 阿拉 ...

  5. java中文数字与阿拉伯数字相互转换

    最近有一个业务需要用到中文数字与阿拉伯数字相互转换,废话不多说直接上代码. 中文数字/阿拉伯数字互转第一次完善:https://blog.csdn.net/qq_26896085/article/de ...

  6. c# 中文数字转阿拉伯数字

    最近迷上了看网络小说,手机上的小说阅读器全都是收费的,所以决定下载下载再导入到手机上,可是能下载到的现成的TXT格式小说全都被打了广告,仔细看的时候像一些"首"."发&q ...

  7. 阿拉伯数字中文oracle,【oracle】中文数字转阿拉伯数字

    简体中文数字转阿拉伯数字,分为两个存储过程,一个是处理小数位的,一个是处理整数位的,加入部分检错处理,没有穷举所有非法输入,支持数据大小为:number型支持到多少就支持到多少,这是个写得比较好的转换 ...

  8. cn2.php中文,Python使用cn2an实现中文数字与阿拉伯数字的相互转换

    工作中经常遇到阿拉伯数字转换称为中文数字或者大写金额,在网上搜了下,cn2an口碑较好,遂进行了一番学习. 安装 pip install cn2an 依赖库为setuptools.PyYAML 查看版 ...

  9. 使用cn2an实现中文数字与阿拉伯数字的相互转换

    工作中经常遇到阿拉伯数字转换称为中文数字或者大写金额,在网上搜了下,cn2an口碑较好,遂进行了一番学习. 安装 pip install cn2an 依赖库为setuptools.PyYAML 查看版 ...

  10. Excel如何将中文数字转为阿拉伯数字

    如下图,A列数据是中文数字,现在想要将这些中文数字转为阿拉伯数字. 将A列数据复制到B列中 选中B列所有数据单元格 点击下图选项(Excel工具箱,具体的下载安装方法百度即可,本文不做详细解说) 选择 ...

最新文章

  1. PAT(甲级)2018年冬季考试 7-4 Heap Paths(非递归与递归解法)
  2. spark 中的RDD编程:基于Java api
  3. C++ 常用算数生成算法
  4. 10.15 lzxkj
  5. 设计模式学习笔记一——开篇
  6. fastJson toJSONString注意点
  7. python中span函数,如何用python中BeautifulSoup提取无类名的span内文本
  8. NERO9注册机使用
  9. 三星k3梅林没有软件中心_斐讯K3梅林软件中心版刷机包 修正WAN口 修正2.4G 自动息屏 完美混血...
  10. 电脑连接android智能电视的一种方法
  11. Ubuntu通过清华镜像源下载软件
  12. 人工智能-生物神经网络
  13. c 语言rand()生成随机数
  14. Python 环境及开发工具 IDLE 安装教程
  15. 在计算机上知道手机密码,不知道密码查手机通话记录:傻瓜式教程
  16. 初学单片机:Proteus介绍、Proteus与Keil联调(Windows10环境下)
  17. 全球围剿下,苹果还能挺多久?
  18. java之21点游戏(只包含一个玩家和一个庄家,是否抓牌,没有黑杰克)
  19. 硬件学习(三)电阻作用
  20. Vs2008编译vtk5.10详细教程

热门文章

  1. 这个世界上人真的分三六九等,你信吗?
  2. 2022 年 Flutter 适合我吗?Flutter VS Other 量化对比
  3. pandas——解决excel科学计数法问题
  4. 小学计算机表格课件,小学信息技术级轻松做表格Word表格制作PPT课件.ppt
  5. 服务器部署与配置文件,服务器部署与服务器迁移之配置文件篇.pptx
  6. 国外设计素材网址干货
  7. 微信公众号推文怎么做?
  8. web前端开发常用的几种图片格式及其使用规范
  9. 把照片转换成pdf的格式
  10. 八类网线和七类网线的区别_七类网线和六类网线区别有哪些