代码

let numMap: any = {'一': 1,'二': 2,'两': 2,'三': 3,'四': 4,'五': 5,'六': 6,'七': 7,'八': 8,'九': 9,'零': 0,
}
let unitMap: any = {'十': 10,'百': 100,'千': 1000,'万': 10000,'亿': 100000000,
}
function zhToNum(testString:string) {let num = 0; // 结果let beforeUnit = Infinity;// 如果字符串长度为1则直接使用map// 循环字符串for (let i = 0; i < testString.length; i++) {const char = testString[i]; // 第一个获取的一定是数字let tmpNum = numMap[char]; // 数字let unitSum = 1; // 单位的乘积 eg:'千万' => 1000*10000if (i == testString.length - 1) { // 说明最后一个数字没有单位if(testString[i-1] == '零'){unitSum = 1;}else{unitSum = beforeUnit / 10; // 之前是“万”就加上“千”,千=>百...,考虑'三千二','两千一'的情况}}while (unitMap[testString[i + 1]]) { // 循环找数字之后的单位字符,并相乘,eg:'千万' => 1000*10000unitSum *= unitMap[testString[++i]]}if (beforeUnit > unitSum) { // 判断之前的单位,beforeUnit = unitSumtmpNum *= unitSum;num += tmpNum;} else { //此时单位比之前的单位大, 主要考虑到'三百一十"万"三百一十'的情况,此时的万的计算方式为数字与单位相乘beforeUnit = Infinity; // 重置前一个单位num += tmpNum;num *= unitSum;}}return num;
}
console.log('一千三百二十一:',zhToNum('一千三百二十一'));
console.log('一千三百二十一万一千三百二十一:',zhToNum('一千三百二十一万一千三百二十一'));
console.log('一千万三百零一:',zhToNum('一千万三百零一'));
console.log('一亿五千万三百:',zhToNum('一亿五千万三百'));
console.log('三万两千一:',zhToNum('三万两千一'));

基本思路

数字*单位 + 数字*单位

特殊处理

'一一',中间的”“处理和上面所述整体思路不一样,需要判断该单位之前的单位是否比它小

  1. 小的话,就应该在计算了1320数字后先加1,再乘以10000。而不是原来的相加
  2. 大的话说明和原来一样,数字*单位 + 数字*单位

"四千三","三万二",最后一位不带单位时要补最近的单位

'二千零一',若最后一位没有单位时,若倒数第二位为‘零’,则补上单位1

自己做的练习,若有错误,敬请指出。

JS 中文数转数字练习相关推荐

  1. js将阿拉伯数字转换成中文的大写数字

    js将阿拉伯数字转换成中文的大写数字 export const numberToChinese = (num) => {var AA = new Array("零", &qu ...

  2. 中文数藏与CIC国信公链等有关机构顺利召开国内数字藏品规划标准研讨会

    构建标准化合规化机制 推动数字藏品行业健康有序发展 2022年5月15日,由CIC国信公链数字出版链主办,中文数藏平台.中国新闻出版研究院数字出版研究所.横琴数链数字金融研究院.中国民营科技实业家协会 ...

  3. js将阿拉伯数字翻译成中文的大写数字

    // 将阿拉伯数字翻译成中文的大写数字 export const numberToChinese = (num) => {     var AA = new Array("零" ...

  4. JS if 水仙花数 游乐园门票计算 闰年 三元运算符 for循环 算法 穷举法 While 拔萝卜 等差数 随机数函数random 区间数 猜数字

         算法题 水仙花数  数学方法 字符串方法   游乐园门票计算  Switch   闰年 <body> <script>var month = Number(promp ...

  5. php 判断只能是数字和字母,PHP_JS只能输入数字或数字和字母等的正则表达式,JS判断只能是数字和小数点 0. - phpStudy...

    JS只能输入数字或数字和字母等的正则表达式 JS判断只能是数字和小数点 0.不能输入中文 1) 2) function chkIt(frm){ if (frm.n1.value.length>0 ...

  6. js判断只能输入数字或小数点

    JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input οnkeyup="this.value=this.value.replace(/\D/g,'' ...

  7. js中文首字母排序(二)

    前面写了一篇 js中文首字母排序(一) 链接:http://www.alexpers.com/opuscule/chineseSort/sort.html 文章主要是应用过来js的两个方法,sort( ...

  8. js 字符串转化成数字

     js 字符串转化成数字 的 三种方法主要有 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换 ...

  9. Js判断是否为数字,是否为空,是否为整形,是否为浮点型,是否为对象

    Js判断是否为数字,是否为空,是否为整形,是否为浮点型,是否为对象  /**********************一.验证类*****************************/ //对象是否 ...

最新文章

  1. 概率论中指数分布介绍及C++11中std::exponential_distribution的使用
  2. HDU 3555 Bomb
  3. 比较两个二维数组是否相等
  4. linux源码安装php缺少动态库,php源代码安装常见错误解决办法
  5. emctl start dbconsole OC4J_dbconsole*** not found
  6. pythonpygame中主函数_从0开始学Python-14.2 pygame的核心对象
  7. 对于原始轨迹的噪声过滤方法和曲率计算方法
  8. 脚本文件不变色_LoadRunner脚本开发
  9. VS Winform开发实践纪要
  10. 2021年最新Java学习路线图指南
  11. #PLC_一次看懂数位低通滤波器设计(含代码实现)
  12. 游戏引擎 Unity 的入门易精通难体现在哪?为什么?
  13. mkv转换mp4格式,mkv格式转mp4
  14. H3C交换机WEB管理时间_H3C 交换机之VLAN配置与VLAN间访问
  15. 一种测试方法论RST(非广告)
  16. SpringCloudAlibaba之Nacos
  17. 算法精解----11、开地址哈希表
  18. [C++]派(二分算法)
  19. html项目符号正方形,HTML无序列表| HTML项目符号列表
  20. 实现一个方法,给定一个输入字符串,能够删除所有连续同样字母(大小写不敏感)。例如,输入为ABBCCCCCBBAB,输出就是 ABCBAB

热门文章

  1. 尚硅谷网上书城项目概要
  2. cad模型轻量化_保持外观的CAD模型轻量化技术
  3. 与愚人节有关的无聊事——QQ伪装
  4. Linux 下分区表的备份与恢复
  5. wps中图片怎么居中_wps2010里插入图片如何使图片居中啊!
  6. 年薪100万都是什么样人才啊?
  7. 计算机二级WPS 选择题(模拟和解析八)
  8. 使用计算机自适应测验大型测验,四年级数学成就计算机自适应测验(CAT)的初步编制...
  9. 土巴兔上市再折戟,互联网家装没故事
  10. 2021WSB-day1-2-Ajay Kumar介绍Less Constrained下的非接触性掌纹识别