快速业务通道

将数字用中文读出来

作者 佚名技术 来源 服务器技术 浏览 发布时间 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; ivar tem1=fd+4*(i-1)
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 var m:String = zf[1].charAt(i);
strdig += dws[Number(m)];
}
//endfor
if (zf[1].length>0) {
str = str+"点"+strdig;
}
trace(str);
} 关键词:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号