将数字用中文读出来
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
看了dispbbs.ASP?boardID=1&ID=227550&page=1这个帖子,本觉得很简单,但是实际动手以后才发觉不是很简单 :P 最初我想了一个方法:就是把这个数字先切分成整数和小数,然后整数部分按大单位切分,比如 亿 万 然后 再单独读取小数部分。 这样做的话 实际在添加大单位的时候每个段的读法都是一样的 比如 12345678 1234(一千二百三十肆) 5678(五千六百七十八)然后两个字段加一个(万) 这样就能读出来了 但是当我在实际写的时候却发现:我忽略了零的情况......于是在做到: //获得随机数 var nums:Number = random(1000000000); trace("该数字为: "+nums); //将随机数转换为字符串对象 var k:String = nums.toString(); trace("转换为字符串后为: "+k); //获得该数的长度 var kl:Number = k.length; trace("总共长度为: "+kl); //kl除以4求余来计算该加的单位 //****** //获得该分的段数 var duanshu:Number = Math.ceil(kl/4); trace("该分为 "+duanshu+" 段"); //求余获得最前面的一段 var fd:Number = kl%4; trace("分段的第一段为 "+fd+" 位"); //取出第一段的值 //在这个基础上每4位开始分割 var zid:Array=[]; for (var i = 0; i var tem2=fd+4*i zid[i]=k.substring(tem1,tem2) trace(zid[i]+" "+tem1+" "+tem2) } }//zid记录切割后的字段 就只能打住了。 重新考虑思考的方向 后来重新想的思路如下 : 对于一个数字 56789365.123 比如这个吧 读作:5千6百7十8万9千3百6十5 点 123 仔细看看 大得思路还是不变的 分割成整数和小数部分 然后分开读 这里整数部分 我是这么想的: 5 五 6 六十五 3 三百六十五 9 玖千三百六十五 8 捌万玖千三百六十五 ....... 看明白了没? 读出相应的数 然后加上各自的单位。 然后我们来考虑有“0”的情况 比如:1000001 1 一 0 零十一 0 零百零十一 ...... 这个地方如果在零十一到了下一次的时候 只要检测是否是0 如果是0 就去掉读出数据的前两位 这样就ok了~ 于是得到了下面的代码:(具体不再说明了 思路都有了 慢慢的看吧) function Transform(whole:Number) { //将whole转换成为字符串 var whole_st = whole.toString(10); //分离整数与小数 var zf:Array = whole_st.split("."); trace("整数:"+zf[0]+" 小数:"+zf[1]); //求出整数的长度 var len:Number = zf[0].length; trace("整数长度为: "+len); //定义单位数组 //**************** //大单位 var dw2:Array = ["", "万", "亿"]; //小单位 var dw1:Array = ["拾", "佰", "千"]; //整数部分用 var dw:Array = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; //小数部分用 var dws:Array = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; //***************** var k0:Number = 0; //计小单位 var k1:Number = 0; //计大单位 var k2:Number = 0; var str:String = ""; for (var i = 1; i<=len; i++) { var n:String = zf[0].charAt(len-i); trace(n); if (n == "0") { k0++; if (k1 != 0) { str = str.substr(1, str.length); trace(str+" *"); } //endif } else { k0 = 0; } //endifelse if (k0<=1) { str = dw[Number(n)]+str; trace(str); } //endif if (len-i-1>=0) { if (k1 != 3) { str = dw1[k1]+str; k1++; } else { k1 = 0; var temp:String = str.substr(0, 2); if (temp == "万" || temp == "亿") { str = str.substr(0, 2); trace(str+" **"); } //endif str = dw2[k2]+str; } //endifelse } //endif if (k1 == 3) { k2++; } //endif } //endfor var strdig:String = ""; for (var i = 0; i strdig += dws[Number(m)]; } //endfor if (zf[1].length>0) { str = str+"点"+strdig; } trace(str); } 关键词: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: “悬停”问题之—循环图与悬停下一篇: 一款漂亮别致的QQ菜单
关于将数字用中文读出来的所有评论