用javascript实现数字大小写转换 | 您所在的位置:网站首页 › 个十百千万亿用大写怎么写 › 用javascript实现数字大小写转换 |
需求: 大小写互转 小写 大写 金融大写 0 零
123 一百二十三
103 一百零三
1003 一千零三
ok,我们先来研究一下 小写 小写长度 常用大写 大写长度 完整大写 完整大写长度 0 0 零 = = = 123 3 一百二十三 = = = 103 3 一百零三 = 一百零十三 5 1003 4 一千零三 4 一千零百零十三 7 上面的数字比较短,这里就来个更长的数字 零亿零千零百零十零万零千零百零十零亿零千零百零十零万零千零百零十零亿零千零百零十零万零千零百零十零 上面用的大写形式,好看点,其实就是下面三段,这个数字够大了 零 亿零千零百零十零 万零千零百零十零 亿零千零百零十零 万零千零百零十零 亿零千零百零十零 万零千零百零十零 1 9 8765 4321 9 8765 4321 9 8765 4321 这里我们可以发现好几个规律性的东东 1. 除了个位上的数没有单位外,其它位上的数字都有单位,其实也有就是个,但是一般不用 2. 数字的单位有,个十百千万亿,常用的就这些,其它自己去研究 3. 数字的长度和其完整大写长度的关系为,数字.len*2-1=完整大写.len 4. 每5位是一个万的循环, 每9位是一个亿的循环(小写形式看出) 5. 小写可以转成完整大写,只需要在相应位上加上单位 6. 完整大写可以转成常用大写,只需要省略掉零位及其单位 7. 小写和常用大写没有直接规律,但是小写和完整大写,常用大写和完整大写有规律 8. 小写->完整大写->常用大写,就是一个完整过程 -------------------------------小写转大写 已经很清楚小写转大写的完整过程了,ok下面上代码 单位数组 UNIT:["千","","十","百","万","亿"]大写数字数组 UNUM:["零","一","二","三","四","五","六","七","八","九"]为了处理方便,我们总是倒序处理大小写,所以先来个反转函数 1 function Reserve(S) { 2 //return S.split("").reverse().join(""); 3 var tmp=""; 4 for(i=;i小写这里有个问题,完整大写需要一个模板来作为参照物,类似于Format格式 幸运的是我们已经有了 零亿零千零百零十零万零千零百零十零亿零千零百零十零万零千零百零十零亿零千零百零十零万零千零百零十零 无论完整大写是什么,都只是上面的子集 请注意对比下面四组数据,全部是倒序 模板 零十零百零千零万零十零百零千零亿零十零百零千零万零十零百零千零亿零 常用(原始) 一零百五千三万四十二零千一 完整 一十零百五千三万四十二百零千一 常用(缺) 一 零百五千三万四十二 零千一 对比模板和常用(原始)两组数据,现在将常用(原始)的每一位填入模板中,然后去掉,模板多余的位,得到完整形式 将完整和常用(原始)对比,可以发现常用(缺)缺少只是空格标出的地方 如果换成其它更多形式对比,最终发现,只是缺少单位和零 通过常用和模板的对比可以得出完整形式第一步,按照完整大写模板,将常用大写转成完整大写,循环原始数据,如果缺少在模板中对应的位或者单位就补进去. 1 function ToLower (ms) 2 { 3 //全零数 4 5 if (ms.replace(/零*/ig,"")=="") return "0"; 6 var fmt="零亿零千零百零十零万零千零百零十零亿零千零百零十零万零千零百零十零亿零千零百零十零万零千零百零十零"; 7 var mod="零一二三四五六七八九" 8 if (ms=="十") ms="十零" 9 if (ms.charAt(0)=="十") ms="一"+ms 10 11 fmt=Reserve(fmt); 12 ms=Reserve(ms); 13 14 var result="" 15 var n=0; 16 17 for(i=0;i-1 && cc!="零") 22 { 23 result+=cc; 24 n++; 25 }//碰到单位的时候,从模板中n开始拷贝到单位位置 26 else if (mod.indexOf(cc) |
CopyRight 2018-2019 实验室设备网 版权所有 |