看了
dispbbs.ASP?boardID=1&ID=227550&page=1这个帖子,本觉得很简单,但是实际动手以后才发觉不是很简单 :P
最初我想了一个方法:就是把这个数字先切分成整数和小数,然后整数部分按大单位切分,比如 亿 万 然后再单独读取小数部分。 这样做的话 实际在添加大单位的时候每个段的读法都是一样的 比如 12345678 1234(一千二百三十肆) 5678(五千六百七十八)然后两个字段加一个(万) 这样就能读出来了 但是当我在实际写的时候却发现:我忽略了零的情况......于是在做到:
//获得随机数
varnums:Number=random(1000000000);
trace("该数字为:"+nums);
//将随机数转换为字符串对象
vark:String=nums.toString();
trace("转换为字符串后为:"+k);
//获得该数的长度
varkl:Number=k.length;
trace("总共长度为:"+kl);
//kl除以4求余来计算该加的单位
//******
//获得该分的段数
varduanshu:Number=Math.ceil(kl/4);
trace("该分为"+duanshu+"段");
//求余获得最前面的一段
varfd:Number=kl%4;
trace("分段的第一段为"+fd+"位");
//取出第一段的值
//在这个基础上每4位开始分割
varzid:Array=[];
for(vari=0;i
vartem1=fd+4*(i-1)
vartem2=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了~
于是得到了下面的代码:(具体不再说明了思路都有了慢慢的看吧)
functionTransform(whole:Number){
//将whole转换成为字符串
varwhole_st=whole.toString(10);
//分离整数与小数
varzf:Array=whole_st.split(".");
trace("整数:"+zf[0]+"小数:"+zf[1]);
//求出整数的长度
varlen:Number=zf[0].length;
trace("整数长度为:"+len);
//定义单位数组
//****************
//大单位
vardw2:Array=["","万","亿"];
//小单位
vardw1:Array=["拾","佰","千"];
//整数部分用
vardw:Array=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
//小数部分用
vardws:Array=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
//*****************
vark0:Number=0;
//计小单位
vark1:Number=0;
//计大单位
vark2:Number=0;
varstr:String="";
for(vari=1;i<=len;i++){
varn: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;
vartemp: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
varstrdig:String="";
for(vari=0;i
varm:String=zf[1].charAt(i);
strdig+=dws[Number(m)];
}
//endfor
if(zf[1].length>0){
str=str+"点"+strdig;
}
trace(str);
}