由于本日刚好有这个需求,以是寻求办理方案。如果因此前,我肯定追求能用就行,何必吹毛求疵。
搜索引擎
搜索结果
人工智能利用js实现汉字转阿拉伯数字
处理结果:191289990995
还有更好的方法吗
处理结果:9.509000000009997e+27
当数字很大的时候,上面的例子就有问题了
处理结果:9509000000009999000099991029
结果也未能办理这个问题,此时可能有朋友要问,你的数字得有多大啊?
九千九百零五万亿九千九百九十九亿九千九百九十九万九千零一十二
你这是钢筋吧!!!
当然,也不全是数字大的问题,还是10到19的问题、连续零的问题、结尾的问题等等。
手动实现思考……
思路1:我们首先找出比较大的单位,然后无限向小单位递归,是不是可以?
const regs = [ /^.亿/, /^.万/, /^.千/, /^.百/, // ...];
匹配思路
想着的时候就直接放弃了,由于会以为很繁芜……。
等等,我彷佛创造了什么?
思路2:我直接把单位删除,把对应的笔墨转成数字不就可以了?good idea...。在测试的时候,创造了连续零这个坑……,结尾坑……,10到19的坑……,然后又考试测验其他思路,结果便是一团糟。那么我们干脆屈服一个新的理论,办理问题的办法便是……。
小数字结果
大数字效果
const reg = /([零]|[一二三四五六七八九]+)/g;const dic = { 零: 0, 一: 1, 二: 2, 三: 3, 四: 4, 五: 5, 六: 6, 七: 7, 八: 8, 九: 9, 十: "0", 百: "00", 千: "000", 万: "0000", 亿: "00000000",};// 处理10-19的问题if (/^十/.test(content)) { content = "一" + content;}// 处理连续零的问题content = geZero(content);// 处理单位直接结尾content = content.replace(/[十百千万亿]$/, (str) => { return str + dic[str].replace(/0/g, "零");});// 开始更换数字const keys = Array.from(content.match(reg) || []);const res = keys.map((key) => dic[key]).join('');
人人为我,我为大家,感激您的浏览,我们一起加油吧。